TCP入门 20问

1.什么是TCP(网络五层)网络分层
应用层主要是负责应用之间的协议
传输层主要提供是端对端的通讯,增加TCP头部包含端口号、序列号等
网络互联层主要是从地址传输到地址,必须要增加IP头部包含源IP地址等
网络访问层主要负责是和硬件或网络有关,包括以太网头部包含mac地址等
物理层
网络访问层根据MAC地址判断包是不是发送给自己的
网络互联层IP报文解析传送数据包、确定路由
传输层TCP报文解析
应用层HTTP报文解析

分层的好处
各层独立:限制了依赖关系的范围,各层之间是用标准化的接口,各层不需要知道上下层是如何工作的,增加或修改一个应用层协议不回影响传输层协议。
灵活性更好:如果路由器不需要应用层和传输层,分层以后路由器就可以只用加载更少的几个协议层
易于测试或维护:提高了可测试性,可以独立的测试特定层,某一层有了更好的实现可以整体替换掉
能促进标准化:每一层职责清楚,方便进行标准化

2.TCP的三次握手为什么是三次?为什么不是两次、四次?
第一次:Client端发送SYN(建立连接)消息给Server端
第二次:Server端发送SYN(建立连接)消息给Client端,并发送ACK确认
第三次:Client端给Server端发送ACK确认

两次:Server端无法确定Client端的接收能力;
四次:TCP面向连接,连接面向双方,三次已能满足需求,四次连接造成资源的浪费;

3.TCP的四次挥手为什么是四次?为什么不是三次
为了断开链接TCP需要发送四次报文
第一次:Client端发送消息给Server端
第二次:Server端收到消息立刻返回给Client端ACK(响应)确认
第三次:Server端发送消息给Client端
第四次:Client端收到消息立刻返回给Server端ACK(响应)确认
优化成三次,第一次挥手时候,Server端进入CLOSE_WAIT状态,立马发送一个针对FIN(关闭连接)的ACK(响应)确认,但是第二次和第三可能会有时差(这期间可能还有些资源没有释放或请求没有处理),如果第二次和第三次合为一体,Client端以最后Server端lastACK为准,超过设置时间为,作为TCP连接Client端不断发送消息给Server端,会认为Server端没有收到消息,造成资源浪费。

4.为什么SYN(建立连接)/FIN(关闭连接)不包含数据却要消耗一个序列号
凡是需要对端确认的,一定消耗TCP报文的序列号。SYN(建立连接)和FIN(关闭连接)需要对端的确认,所以需要消耗一个序列号。
原因:可能出现由于网络原因出现重发,没有序列号可能就会造成资源的浪费(对重发的数据做处理);使调用具有顺序;

5.什么是半连接队列?什么事SYN Flood攻击?
Client端大量伪造IP发送SYN(建立连接)包,服务端回复的ACK(响应)+SYN(建立连接)去到一个【未知】的IP地址,势必会造成大量的连接处于SYN_RCVD状态,而服务器的半连接队列大小也是有限制的,如果半连接队列大小也是有限的,如果半连接队列满,也会出现无法处理正常请求的情况
在这里插入图片描述

6.说说TCP快速打开(TFO)的原理
TCP快速打开(TCP Fast Open,TFO)
TFO是在原来TCP协议上扩展协议,它的主要原理就在发送第一个SYN(建立连接)包的时候就开始传数据了,不过它要求当前客户端之前已经完成过[正常]的三次握手
快速打开分两个阶段:请求Fast Open Cookie和真正开始TCP Fast Open
第一个阶段Fast Open Cookie
第一次:Client端发送SYN包(在header捎带Cookie request)Server端收到后生成Cookie值,放在header里传送给发送端
第二次:Server端发送SYN包(在header里捎带生成Cookie值)和ACK(响应)Client收到后把Cookie存储在本地
第三次:Client端给Server端发送ACK(响应)确认
第二个阶段TCP Fast Open
Client端发送的数据包包括(数据(HTTP请求、SYN包、在header捎带Cookie))Server端收到消息后校验Cookie的合法性,合法则响应ACK确认,如果不合法则丢弃包走正常的建立连接流程

TCP Fast Open
一个最显著的优点是可以利用握手去除一个往返RTT可以防止SYN-Flood攻击之类的

7.TCP报文中的时间戳有什么作用?
头部信息中存在时间戳(类别、长度、发送方时间戳、回显时间戳)
防止序列号的回绕问题
TCP的序列号用32bit来表示,因此在2^32字节的数据传输后序列号就会溢出回绕。TCP的窗口经过窗口缩放可以最高到1GB,在高速网络中,序列号在很短的时间内就会被重复使用。

8.TCP的超时重传时间是如何计算的?
TCP具有超时重传机制,即间隔一段时间没有等到数据包的回复时,重传这个数据包
这个重传间隔也叫做超时重传时间
RTO太小,导致不必要的重传;RTO太大,丢包很久才重传;

9.能不能说一说TCP的流量控制?
对于发送端和接收端而言,TCP需要把发送的数据放到发送缓冲区,将接收的数据放到接收缓冲区。
而流量控制要做的事情,就是在通过接收缓冲区的大小,控制发送端的发送。如果对方的接收缓冲区满了,就不能再继续发送了。
为了控制发送端的速率,接收端会告知客户端自己接收窗口,也就是接收缓冲区中空闲的部分。

发送端的数据包的状态
已发送且已确认
已发送但未确认
未发送但接收端可以接收(接收端有空间接收)
未发送且不可以发送(接收端没空间接收)

10.如何理解TCP的keep_alive的原理?
一个TCP连接上,如果通信双方都不向对方发送消息,那TCP连接就不会有任何数据交换。
假设应用程序是一个web服务器,客户端发出三次握手以后故障宕机或踢掉网线,对于web服务器而言,下一个数据包将永远无法到来,但是它一无所知。
TCP协议的设计者考虑到了这种检测长时间死连接的需求,于是乎设计了keepalive的机制。
它的作用就是探测对端的连接有没有失效,通过定时发送探测包来探测连接的对端是否存活,不过默认情况下需要7200s没有数据包交互才会发送keepalive探测包,往往这个时间太久了,我们熟知的很多组建都没有开启keepalive特性,而是选择在应用层做心跳机制。

11.聊一聊TCP中的端口号?
端口号默认网络分层中的传输层
TCP用两个字节的整数来表示端口号,一台主机最大允许65536个端口号
熟知端口号(HTTP:80,HTTPS 4443,SSH 22);已登记的端口号(MySQL 3306,Redis 6379,MongoDB 27017);临时端口号
12.TCP场景问题
A B两个主机之间建立了一个TCP连接,A主机发给B主机两个TCP报文,大小分别是500和300,第一个报文的序列号是200,那么B主机接收两个报文后,返回的确认号是多少?
500+300+200

收到IP数据包解析以后,它怎么知道这个分组应该投递到上层的哪一个协议(UDP或TCP)?
IP头信息协议:区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17

TCP提供了一种字节流服务,而收发双方都不保持记录的边界,应用程序应用如何提供他们自己的记录标识呢?
应用程序使用自己约定的规则来表示消息的边界,比如有一些使用回车+换行,比如Redis的通信协议

13.讲一讲telnet的用法
检查端口是否打开
telnet的一个最大作用就是检查一个端口是否处于打开,使用命令是telnet [dimainname or ip] [port] ,这条命令能告诉我们到远端server指定端口的网连接是否可达。

14.讲一讲tcpdump的用法
tcpdump是一个抓包工具
tcpdump -i any 查看tcp网路传输
tcpdump -i any host ip 查看该服务器与对应ip的tcp网路传输

15.讲一讲netstat的用法
netstat显示各种网络信息
netstat -at tcp协议相关的套接字
netstat -l 正在连接的套接字

16.TCP和UDP的区别
TCP是一个面向连接的、可靠的、基于字节流的传输层协议。
而UDP是一个面向无连接的传输层协议
面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP需要三次握手建立连接,而UDP没有相应建立连接的过程。
可靠性。TCP花了非常多的功夫保证连接的可靠,这个可靠性体现在哪些方面。
1)TCP有状态:TCP会精准记录哪些数据发送了,哪些数据被对方接收了,哪些没有被接收到,而且保证数据包按序到达,不允许有半点差错。
2)TCP可控性:意识丢包了或者网络环境不佳,TCP会根据具体情况调整自己的行为,控制自己的发送速度或者重发

学习视频:https://www.bilibili.com/video/BV1FY4y1B7YM?p=17&spm_id_from=pageDriver

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值