随记(15)网络编程
1. 网络编程来源(必看)
http://www.52im.net/thread-1095-1-1.html
2. ISO七层模型、TCP/IP四层模型
按照个人理解分为五层模型,分别是:应用层、传输层、网络层、链接层、实体层
- 1)应用层即为用户可以看到的,程序开发需要传输的数据包,比如http请求、游戏后端与前端自定义的协议
- 2)传输层,大部分以tcp协议为基础的,传输的是tcp数据包,包含了tcp标头- (发送方端口、接收方端口)和数据,数据里面封装的是应用层的数据,实现程序应用的端口对端口的通信
- 3)网络层,以ip协议为基础,传输的是ip数据包,包含了ip头部20字节(发送方ip、接收方ip64位)和数据,数据里面封装的是tcp数据包,实现了主机对主机的通信
- 4)链接层,以太网协议为基础,传输的是以太网数据包,包含了帧头18字节(发送方mac地址、接收方mac地址48位)和数据,数据里面封装的是ip数据包46~1500
- 5)实体层,两台主机用光缆连接起来,实现了1、0的电信号传输
socket套接字
- ip+端口,实现主机对主机之间的程序对程序的通信
网卡对网卡的数据传输
- 1)本质上,数据的传输是一块网卡地址传输到另一块网卡地址(MAC地址12个16位),原理是利用广播,每台机器再确认是否接收方mac是自己,否则丢包。
- 2)但是在互联网内实现,每台电脑都会接受到该数据包不现实,会产生广播风暴,所以产生了ip,确定了子网络
- 3)只要在子网络内进行广播即可,非子网内则发送到网关由网关按照路由进行转发到相应的子网的网关,进行广播
3. 短连接、长连接、websocket
web通信,http协议属于应用层协议,基于传输层tcp之上(长连接、短连接)
- 1)HTTP短连接,建立tcp连接,传数据,关闭连接,例网站的http服务(http请求)
- 2)HTTP长连接,如推送服务(轮询)
- 3)Websocket长连接,基于ws/wss协议,实现客户端、服务端之间相互推送信息,异步通信
游戏应用通信,基于自定义协议,属于应用层,基于传输层tcp之上
- 1)面向连接(tcp),同步
- 2)面向无连接(udp),异步
任何通信都始以socket为基础,ip+端口,可以实现主机对主机上的的程序对程序的通信
4.三次握手、数据传输、四次挥手
ACK 收到,下一个序号是
Seq 当前序号是
三次握手
- 1)客户端向服务端发送SYN包,seq=x
- 2)服务端向客户端发送ACK + SYN包, ack=x+1,seq=y
- 3)客户端向服务端发送ACK包, ack=y+1
数据传输
- 1)客户端向服务端发送数据包,seq=x+1、ack=y+1
- 2)服务端向客户端发送ACK包,ack=x+2
四次挥手
- 1)客户端向服务端发送一个FIN包,seq=x+2、ack=y+1(告知服务端没数据)
- 2)服务端向客户端发送一个ACK包,ack=x+3
- 3)服务端向客户端发送一个FIN包,seq=y+1
- 4)客户端想服务端发送一个 ACK包,ack=y+2
TIME_WAIT
socket最终进入TIME_WAIT,等待2个MSL时间被系统回收,若系统中大量socket进入TIME_WAIT占用资源,则无法创建新的socket