-
什么是网络编程
- 网络编程的本质是两个设备之间的数据交换
-
使用IP地址,或域名,和端口连接到另一台计算机上对应的程序,按照规定的协议(数据格式)来交换数据。
- Socket分为2种协议
- TCP 面向连接
通过三次握手、四次挥手完成连接,是可靠协议
在连接中进行大数据量传输,以字节流方式
安全,效率低,对方必须进行3次握手才可以通讯
应用场景: http、rpc - UDP 面向无连接
不需要建立建立连接
将数据及源的封装成数据包中,每个数据报的大小在限制64k内
不安全,效率高
- 网络模型图
- TCP 三次握手
在TCP/IP协议中,TCP协议采用三次握手建立一个连接。 如下图:
第一次握手:客户端会向服务器端发送码为syn=1,随机产生一个seq_number=x的数据包到服务器端 (syn)
第二次握手:服务端接受到客户端请求,确认ack=x+1, 于是向客户端发送syn(服务端独立生成 随机生成数字Y)+ack
第三次握手:客户端接受syn+ack,向服务器端发送ack=y+1,此包发送完毕即可 建立tcp连接。
完成三次握手,客户端与服务器开始传送数据。 - TCP 四次挥手
第一次挥手 客户端向服务端发送一个释放连接请求;
第二次挥手 服务端接受到释放通知之后,进入等待关闭状态,会将还未传输完毕的数据继续传输;
第三次挥手 服务器端所有的数据发送完毕之后,就告诉客户端说现在可以释放连接了。
第四次挥手 客户端确认是最终释放连接通知;服务器只要收到了客户端发出的确认,立即进入CLOSED状态。