五层协议体系结构
应用层:http,https
传输层:tcp,udp
网络层:ip
数据链路层:
物理层:
udp的主要特点
无连接
面向报文,应用程序传递的数据添加首部后直接下放给ip层
不保证可靠性交付
支持一对一,一对多,多对多,多对一的交互通信
没有拥塞控制,网络拥塞时,不会使原主机发送速率降低
首部开销小,只有8字节,tcp20字节
tcp的主要特点
面向连接的传输层协议,应用程序发送请求前需要建立连接,发送完毕后需要释放连接
只支持一对一,点对点
保证可靠性交付,无差错,不丢失,不重复,按序到达
全双工通信,允许通信双方应用进程都可以发送数据
面向字节流
三次握手
服务器进程创建传输控制块tcb,并处于监听状态,等待客户端的连接请求
客户端创建传输控制块tcb,向服务器发送连接请求报文段
服务器收到连接请求报文段后,如同意建立连接,回复确认报文段
客户端收到确认报文段,回复确认报文段,并进入已建立连接状态
服务器收到确认报文段,进入已建立连接状态
tcp建立连接后,为什么还要发送确认?
为了防止客户端发送连接请求后断开(已失效请求),服务器端收到后进入连接状态而产生错误
四次挥手
客户端发送连接释放报文段,停止发送数据,进入FIN-WAIT-1(终止等待1)状态,等待服务器确认
服务器收到连接释放报文段后,发送确认报文段,进入CLOSE-WAIT(关闭等待)状态,服务器发送数据客户端仍要接收
客户端收到确认后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发出连接释放报文段
服务器没有要发送的数据了,发出连接释放报文段,进入LAST-ACK(最后确认)状态,等待客户端确认
客户端收到连接释放报文段后,发出确认,进入TIME-WAIT(时间等待)状态,经过时间等待计时器设置的时间2msl后,进入CLOSED(关闭)状态
服务器收到确认报文段,进入CLOSED(关闭)状态
为什么要等待2msl?
保证客户端最后一个报文段能够到达服务器,如果没有到达,服务器会超时重传连接释放报文段,保证双方都能进入closed状态
创建socket步骤
创建socket
绑定socket到指定地址和端口
监听客户端连接
读取客户端输入
关闭socket