TCP/IP详解,秋招复习看这里(点个赞呗)

欠了三天+两天的的TCP/IP协议详解,秋招复习看这里。

牛油闷,火鸡闷,又到了记得 点赞 的环节,别光顾着收藏了

TCP/IP协议本来是21号就应该写完了,但我确实没理解彻底,(我就是想鸽)


因为无论工作还是秋招,TCP/IP都是计算机网络里最关键的环节,我这里就全面详细的写一下TCP/IP协议,希望对大家有所帮助。
也推荐大家看一下《TCP/IP详解 卷一:协议》 第二版

首先是TCP/IP协议的作用

负责从应用传输数据到Internet
Application ——>TCP ——> IP ——> Internet
IP协议定义了地址功能,但IP不能保证数据包完整,所以依赖TCP协议

一、体系结构和主要协议


数据链路层:

处理数据在物理传输媒介上的传输

MTU的概念:

MTU是最大传输单元

ARP(地址解析协议):

将IP地址转化为物理地址

RARP协议(逆地址解析协议):

将物理地址转化为IP地址

这样我闷就可以使数据在主机和数据链路层间传输了

网络层:

数据包的选路和转发

IP协议:

根据数据包的目的IP地址决定如何投递
IP传输通过路由器,使用分组转发算法去交付数据报(可以详细看一下分组转发,这里不作介绍)

为了更有效的转发IP数据报,这里使用了ICMP协议(国际控制报文协议)

ICMP协议:

检测网络连接

ICMP报文头部:

8位 区分报文类型 分为查询报文(查询网络信息)、差错报文(回应网络错误)

差错报文

(1)终点不可到达
(2)时间超过
(3)参数问题
(4)改变路由

报文

(1)会送请求和回答
(2)时间戳请求和回答
8位 细分不同报文
16位校验和 对整个报文进行循环冗余校验(CRC)检验报文是否损坏

至此,我闷就能有效的让数据报在网络层和数据链路层间交付了

传输层:

只关心通信的起始端和目的端,不关心数据包的中转过程

这里有两个主要的协议,TCP协议和UDP协议,其实还有一个SCTP协议,但这里不做介绍(反正大家都没听过,就不讲了)

TCP协议:

为应用层提供可靠、面向连接、基于流的服务

UDP协议:

为应用层提供不可靠、无连接、基于数据报的服务

TCP协议使用了超时重传和数据确认的方式确认数据包被正确发送,所以TCP是可靠的

解释一下封装:

应用程序的数据,沿着协议栈从上往下的传递,每层数据都在上一层的基础上加上自己的头部信息。
应用数据——>加TCP/UDP头部信息——>加IP头部信息——>加帧首部和帧尾部

当自低向上传递的时候,就通过分用,各层协议以此处理帧中本层的头部数据,获取数据

重点内容:TCP首部格式,TCP连接,流量控制,和超时重传

为什么要讲首部格式,为了了解首部每个部分负责的内容,从而更好的理解后面的知识

说明一下几个重点字段的意义:

序号:
占4字节。序号范围是 0 到 2的32次方-1 ,序号增加到 2的32次方-1 后,下一个序列号就回到了1。也就是说,序号使用mod 2的32次方 运算。TCP是面向字节流的,TCP连接中传送的字节流中的每一个字节都按顺序编号。首部中的序号就是指本报文段所发送数据的第一个字节的序号。
确认号:
占4个字节,是期望收到对方下一个报文段的一个数据字节的序号。
确认ACK:
当ACK=1时,确认号有效,当ACK=0时,确认号无效。当建立连接后所有传送的报文段都必须把ACK置1。 (区分开确认号和ACK)
同步SYN:
当SYN=1,ACK=0时,表明这是一个连接请求报文段。
终止FIN:
当FIN=1时。表明此报文的发送方的数据已经发送完毕,并要求释放运输连接。

然后是最爱问的三次握手,四次挥手

三次握手的过程:

条件:服务器的传输控制模块TCB是一开始就被动创建好的(序列号后面会再讲)
1.客户端创建TCB,发起连接请求报文段,SYN置1,表示连接请求报文段 (不能携带数据,但会消耗一个序号)
2.当服务器接收到请求后,发起一个,SYN=1,ACK=1的连接接受报文段(不能携带数据,但会消耗一个序号)
3.当客户端收到接受报文后,需要在发送一条确认,此时ACK=1(能携带数据,如果不携带数据则不消耗序号)

四次挥手的过程:

数据连接结束后双方都可以释放连接:
1.A先发送连接释放报文段,终止控制位FIN置1(不能携带数据,但会消耗一个序号)
2.B收到连接释放报文段后,发出确认,ACK=1,确认号是序号+1。B进入(CLOSE-WAIT)状态,A收到B的确认后进入终止等待2状态,等待B发出的连接释放报文段。此时A向B的连接已经释放,TCP连接处于半关闭状态,也就是说A已经不向B发送数据,但B向A发送数据A任然接受。
3.当B已经没有要向A发送的数据,B就发送连接释放报文段,终止控制位FIN置1(不能携带数据,但会消耗一个序号)
4。A收到连接释放报文段后发送确认,ACK置1。但此时TCP连接并没有释放掉,A还需要进过时间等待计时器(TIME-WAIT)设置的时间2MSL后,TCP连接才完全释放。(这里又有两个问题,为什么需要这一步,为什么1,2不需要这一步)
首先,1,2不需要这一步是因为有超时重传机制,而4需要这一步也恰恰是因为超时重传机制。后面详细讲超时重传。
而第四点中,为了保证A发送的最后一个ACK报文段能够到达B,因为这个ACK报文可能丢失,那么B收不到A的确认,B会重新发送连接释放报文段,而A能在时间等待计时器设置的2MSL时间中收到请求。然后A重新开始第四步。

那么为什么要三次握手呢,为什么不能是两次?是不是经常被问这么一个问题

因为把三次握手改成两次将会发生死锁
例子:客户端B给服务器A发送了一个连接请求。服务器A收到了请求,并确认了请求。在假设是两次握手的情况下,在服务器A眼里TCP连接已经建立。但确认再传输中丢失,B并不觉得TCP连接建立。这种情况下B将忽略A的所有数据报,而A的数据报没有收到确认,会不断的超时重传,从而形成死锁。

那么为什么是四次挥手而不是两次?

为什么不是三次就别问了,跟三次握手为什么不是两次一样,得确认,不然死锁。
那为什么不是两次呢,因为TCP是全双工通信的,两次会到达半关闭状态,具体看上面的四次挥手过程。

超时重传机制

接下来讲一下超时重传、数据确认。至于为什么要确认借鉴为什么是三次握手而不是两次。
数据确认呢是这样的。
首先客户端发送一个数据报,序号为1,数据长度是1000。这里有一个超时计时器
那么服务器接收到后,会发送一个确认报文,确认号为1000+1。表示你下一个该发送的是1001。
那么如何处理发送丢包呢以及确认丢包呢
当客户端的超时计时器到期前,没有收到服务器的确认,无论是发送的包丢了,还是确认的包丢了,都会重新发送数据报。

流量控制

为什么要进行流量控制,是为了让发送方的发送速率不要太快,让接收方来得及接收,减少丢失。
这里使用滑动窗口机制,例如在建立连接时,B告诉A接收窗口rwnd=400,那么发送方的窗口不能超过接收方给出的接收窗口数值。
具体例子:
建立连接后,A发送序号=1,数据1~100
A发送序号=101,数据101~200
A发送序号=201,数据201~300(丢失)
B发送确认ACK=1,确认号=201,rwnd=300,表示要从201开始发送到500截至
A发送序号=301,数据301~400
A发送序号=401,数据401~500
201丢失,A发送序号=201,数据201~300
B发现太快了,发送确认ACK=1,确认号=501,rwnd=0,表示暂时不允许发送(零窗口)
当过了一段时间后,有了一些空间,发送ACK=1,确认号=501,rwnd=300
那么有一个问题了,当这个300的窗口报文丢失了怎么办呢?
这里有一个持续计时器,只要TCP一方收到对方的零窗口通知,就启动持续计时器,若持续时间到了,就给接收方发送一个,零窗口探测报文,若还是0,则重新定时,若不是0则打破死锁。

拥塞避免

拥塞避免和流量控制有什么区别呢?
拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2 )快重传、快恢复。(具体可以自己看看)
流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。

#秋招#
全部评论
大佬,可以开通下博客哦 https://www.nowcoder.com/discuss/208036?type=0&order=0&pos=2&page=5
点赞 回复 分享
发布于 2019-07-27 10:19
赞赞赞
点赞 回复 分享
发布于 2019-07-27 10:18
还有非常关键的timewait和closewait没讲哦
点赞 回复 分享
发布于 2019-07-27 10:17
点赞 回复 分享
发布于 2019-07-27 10:10
get✓
点赞 回复 分享
发布于 2019-07-27 08:22
大佬太强了
点赞 回复 分享
发布于 2019-07-27 07:11
借楼,奇虎360秋招下周一开始,私戳我头像看帖子,可获得内推码
点赞 回复 分享
发布于 2019-07-26 23:07
哥哥,太强了
点赞 回复 分享
发布于 2019-07-26 22:03
嘤嘤嘤
点赞 回复 分享
发布于 2019-07-26 21:52
m
点赞 回复 分享
发布于 2019-07-26 21:40
点赞 回复 分享
发布于 2019-07-26 21:36

相关推荐

评论
68
397
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务