什么是网络编程
网络编程的本质是两个设备之间的数据交换
使用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状态。