网络层
网络层的作用是根据ip找到目的主机,这一层主要有两个问题。第一个问题是到达目的主机需要经过多个路由或主机的转发,是如何知道下一个主机的ip的,第二个问题是到达第目的主机需要知道它的mac地址,将其交给链路层进行传输的。
一、如何知道mac帧首部应该填入什么硬件地址
A主机到B主机传输信息最终还是要把ip数据报封装为mac帧在链路层通过物理管道传输。为了获得对应的硬件地址。每个主机缓存了本局域网中ip和mac地址之间的映射。先在缓存中查找对应的硬件地址然后封装成mac帧进行传输。如果没有找到说明这这个映射过期或者该主机刚加入局域网中。那么就由ARP进程向该局域网内所有主机发送广播,当某一个主机发现是在找他的。就把自己的ip和mac发送给源ip,同时也会把源主机的ip和mac的映射保存。
切片:当ip数据报的长度大于MTU需要把数据报切换为多个片段。
二、路由器的路由表是如何得出的
分组转发算法:
从数据报提出目的主机IP地址D,从D中得出网络号为N
- 如果N就是和当前路由器相连直接交付
- 如果路由器中有D的特定主机路由,就把数据报交给该路由表所指明的吓一跳路由器,否则继续下一步
- 如果路由器中有到达网络N的路由,就把数据报交给该路由表所指明的吓一跳路由器,否则继续下一步
- 如果路由表中有默认路由就把数据报交给路由表所指明的默认路由器,否则继续下一步
- 报告转发分组失败
三、子网与超网
子网将二级划分为三级,更加灵活。子网掩码的1最好是连续中间不要出现0.
255.255.192.0表示子网数为2(22-2,除去全1和全0)。主机数为214-2。
运输层
运输层主要有两个协议UDP和TCP
UDP是无连接,面向报文,无拥塞控制,支持多对多交互通信。
TCP是面向连接,端对端,面向字节流。
一、UDP
面向报文是指对应用层交下来的报文添加首部后就交付ip层,既不合并也不拆分
二、TCP
面向字节流是指TCP把应用层传递下来的数据块当作无结构的字节流存储在TCP的缓存之中。如果应用进程传送到TCP缓存的数据块过长就拆分后在发送(发送的长度根据接受方的窗口值和拥塞程度决定),如果过短等积累足够长度后再发送。
URG:如果用户想要输入中断命令,URG=1表示有紧急命令要处理,接受方程序不要按照原来的顺序来处理数据,会根据紧急指针找到这个中断命令的位置。
ACK:表示确认号字段有效,连接建立后所有的报文必须把ACK置为1。
SYN:连接建立时用来同步序号,SYN=1且ACK=0表示这是一条请求连接,如果同意连接会响应SYN=1且ACK=1。
FIN:FIN=1表示所有的数据传输完成需要释放连接。
2.1 滑动窗口
需要注意发送方已发送的但未得到确认的数据需要暂时保存以备重传,得到确认后才会丢弃并将窗口向前滑动响应的位置(接收方返回的是按序到达序号的最后一位)
发送方缓存未发送和已发送但未确认的数据
接受方缓存按序到达但尚未被应用程序接受和未按序到达的数据
2.2 连接的建立
前两次的报文不能携带数据,但会消耗一个序号,最后一次可以携带数据,如果没有携带则不消耗数据。
2.3 连接的释放
-
其那两次是释放客户端—>服务端的单向连接,所以服务端依然可以向客户端发送数据,
-
当服务端的数据发送完毕后开始释放---->客户端的连接。但B还必须重复上次已发送过的确认号ack = u + 1
-
现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫做最长报文段寿命
-
保活计数器:当客户端长时间无反应后(通常两小时)服务端自动关闭连接
应用层
HTTP
http1.1使用了持续连接(tcp是稳定连接的,可以理解为一条电线,http/1.0每次传输完后就把电线拔了,而http1.1不会这样),避免了每次发送完数据后断开连接下一次发送又需要建立连接的消耗。
HTTP/1.1协议时请求头中总会带上Connection: keep-alive
,如果HTTP/1.1版本的http请求报文不希望使用长连接,则要在请求头中加上Connection: close
https://blog.csdn.net/xiaoduanayu/article/details/78386508