1、计算机网络体系结构:osi七层协议 tcp/ip四层协议 五层协议
1、应用层:应用层协议主要有域名系统DNS,HTTP协议,支持电子邮件的SMTP协议等,应用层交互的数据单元称为报文
2、运输层:运输层主要有两种协议 传输控制协议TCP 提供面向连接的,可靠的数据传输服务
用户数据协议UDP 提供无连接的,尽最大努力的数据传输服务,不保证数据准确性
3、网络层,又叫网际层或者IP层
4、数据链路层
5、物理层
TCP与UDP
tcp结构
特点:面向连接 一定是一对一的,而udp协议可以一对多
可靠的
字节流
经常应用于FTP,http,https等需要可靠性交付的 而udp主要应用于dns,snmp以及视频,音频等多媒体通信,广播通信等
序列号:解决网络包乱序问题,序列号作用:
a、保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道)
b、保证数据的按序到达
c、提高效率,可实现多次发送,一次确认
d、去除重复数据
确认应答号:解决不丢包的问题
udp
三次握手:SYN表示建立连接,ACK表示响应
1、客户端初始化序列号,同时把SYN标志位改为1,,然后把SYN报文发给服务端,此报文不包含应用层数据此时客户端处于syn-sent状态
2、服务端收到客户端的syn报文后,首先也初始化自己的序列号,然后将tcp首部的确认应答号+1,然后将标志位SYN和ACK置为1,然后将此报文发给客户端,此报文也不包含数据,之后服务端处于syn-rcvd状态
3、客户端收到报文后,回应服务端最后一个报文,首先将ACK标志位置为1,然后确认应答号+1,然后发送给服务端,这次是带数据的,之后客户端处于established状态,服务端收到以后,也进入established状态
三次握手原因:1,防止旧的重复连接初始化造成混乱 2、同步双方初始序列号 3、避免资源浪费
通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号
4、保证连接是双工的,即客户端给服务端发消息的同时,服务端也能给客户端发消息
tcp连接断开,四次挥手 FIN表示断开连接
1、客户端准备断开连接,会发送一个tcp首部FIN标志位为1的报文,即FIN报文,之后客户端进入FIN_WAIT_1状态
2、服务端收到该报文后,向客户端发送ACK报文,然后进入CLOSED_WAIT状态,客户端收到ACK报文后,进入FIN_WAIT_2状态
3、服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态
4、客户端收到FIN报文后,回一个ACK报文,之后进入TIME_WAIT状态,服务端收到ACK报文后,进入close状态,客户端经过2MSL一段时间后,自动进入close状态
主动关闭连接的,才有TIME_WAIT状态
为什么要等待2MSL的时间才关闭?
1. 为了保证连接的可靠关闭。如果server没有收到最后⼀个ACK,那么就会重发FIN。
2. 为了避免端⼝重⽤带来的数据混淆。如果client直接进⼊CLOSED状态,⼜⽤相同端⼝号向server建⽴⼀个连接,上⼀次连接的部分数据在⽹络中延迟到达server,数据就可能发⽣混淆了。
tcp/ip协议如何保证可靠性:
1、校验和 发送方将整个报文段分为多个16位的段,然后进行反码相加,将结果存在校验和字段中,接收方用相同的方法计算,如果结果位校验字段所有位是1则正确
2、确认应答与序列号 通过ACK标志位确保应答是否有效,序列号可以保证数据按序到达,提高效率,并且保证了可靠性
3、超时重传
4、连接管理,即tcp建立连接时的三次握手和断开连接时的四次挥手
5、流量控制 接收方处理数据的速度是有限的,如果发送方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会造成丢包,继而引起丢包重传等一系列反应。因此tcp根据接收方的处理能力,来决定发送方的发送速度,即流量控制
在tcp报文段首部中有一个16位窗口长度,
6、拥塞控制 慢启动,先发出少量流量