TCP:IP 协议栈基础
TCP/IP 协议栈
概念介绍:
- Transmission Control Protocol/Internet Protocol 传输控制协议/英特网互联协议 TCP/IP是一个协议栈,包括TCP,IP,UDP,ICMP,RIP,FTP,SMTP,ARP,TELNET等许多协议 最早发源于美国国防部(DOD)的因特网的前身ARPA网项目,1983.1.1日,TCP/IP 取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责和维护 OSI七层协议栈是世界标准协议,但企业中应用较多的是tcp/ip四层协议 共定义了四层,和ISO参考模型的分层对应关系
- 应用层(dns,ftp...) 对应 OSI参考模型的上三层 及 应用层,表示层,会话层
- 传输层(tcp,udp) 对应 传输层
- 网络层(ip) 对应 网络层
- 网络接口层 对应 数据链路层和物理层
/%E6%88%AA%E5%9B%BE/%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE%E5%9B%BE%E7%A4%BA.jpeg)
-
cat /etc/service 查看各种服务端口
-
应用层:向用户提供一组常用的应用程序,比如电子邮件,文件传输访问,远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用协议来提供网络内机器间的文件拷贝功能。
-
传输层:提供应用程序间的通信。其功能包括:
- 1.格式化信息流;
- 2.提供可靠传输。
- 为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送
-
网络层:负责相邻计算机之间通信。其功能包括三方面:
- 1,处理来自传输层的分组发送要求,收到请求后,将分组装入IP数据报,填充报文头,选择去往目标主机路径,然后将数据报发往适当的网络接口。
- 2,处理输入数据报:首先检查其合法性,然后进行寻径-假如该数据报已经到达目标主机,则去掉报文头,将剩下部分交给适当的传输协议;假如该数据未到达目标主机,则转发该数据报。
- 3,处理路径,控流,拥塞等问题
-
网络接口层:这是TCP/IP软件的最底层,负责接收ip数据报并通过网络发送之,或者从网络上接收物理帧,抽出ip数据报交给IP层
-
应用层协议: 在传输层之上就是应用层。传输层的UDP报文和TCP报文段的数据部分就是应用层交付的数据。 DNS-53,FTP-20/21,SMTP-25,HTTP-80,HTPPS-443,RIP,NFS-2049,SNMP-25 Telnet-23,Tftp-69,
-
传输层: tcp:面向连接,可靠的有顺序的连接协议;例如邮件 udp:不可靠的连接;例如:语音,视频通话,直播等
-
TCP特性:
-
工作在传输层
-
面向连接协议
-
全双工协议(双向同时传数据)
-
半关闭
-
错误检查
-
将数据打包成段,排序
-
确认机制
-
数据恢复,重传
-
流量控制,滑动窗口
-
拥塞控制,慢启动和拥塞避免算法
-
-
TCP包头:模拟结构,层层封装 (网络链路层首部封装(网络层首部封装(传输层封装(应用层)))) TCP协议 PORT 传输层通过port号,确定应用层协议
-
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;0-65535个端
-
udp:无连接的协议;0-65535个端口
-
IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
- 0-1023:系统端口或特权端口(仅管理员可用),众所周知,永久的分配给固定的系统应用使用
- 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,
-
49152-65535:动态端口或私有端口,客户端程序随机使用的端口 其范围的定义文件:/proc/sys/net/ipv4/ip_local_port_range
-
TCP三次握手 客户端/服务状态转换:
- 客户端:closed----->syn-sent(同步已发送)---->estab-lished(以建立连接)
- 服务端:closed---->listen---->syn-rcvd(同步收到)---->estab-lished
-
TCP四次挥手 客户端/服务端状态转换:
- 客户端:estab-lished(建立状态)----> fin-wait-1(终止等待1) ----> fin-wait-2(终止等待2) ----> time-wait(等待2MSL 30s,时间等待) ----> closed
- 服务端:estab-lished---->close-wait(关闭等待)---->last-ack(最后确认)---->closed
-
有限状态机FSM:Finite State Machine (11种)
- closed 没有任何连接的状态
- listen 侦听状态,等待来自远方TCP端口的连接请求
- syn-sent 在发送连接请求后,等待对方确认
- syn-received 在收到和发送一个连接请求后,等待对方确认
- established 代表传输连接建立,双方进入数据传送状态
- fin-wait-1 主动关闭,主机已发送关闭连接请求,等待对方确认
- fin-wait-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
- time-wait 完成双向传输连接关闭,等待所有分组消失,一般2MSL为30s
- close-wait 被动关闭,收到对方发来的关闭连接请求,并以确认
- last-ack 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
- closing 双方同时尝试关闭传输连接,等待对方确认
-
TCP超时重传
- 1.异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
- 2.TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
- 3.与TCP超时重传相关的两个内核参数:
- /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
- /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13-30min)
-
网络层协议/Internet层
-
网络层协议包括ip,icmp,ARP(地址解析协议ip地址解析为mac地址),RARP协议
-
Internet 层协议特征
- 运行于OSI网络层
- 面向无连接的协议
- 独立处理数据包
- 分层编址
- 尽力而为传输
- 无数据恢复功能
-
icmp协议:ping命令 设置禁止ping :echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_allicmp
-
arp协议:arping命令 例arping -I ens33 192.168.31.1(模拟arp发出广播,知道该IP地址的mac地址)
-
ARP协议:发出arp广播解析IP地址对应的mac地址,第一次成功通信后记录mac-ip对应关系到内存中,下次直接以单播通信
TCP 协议如何保证可靠传输
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
三次握手--四次挥手--超时重传
- 报文结构
- 三次握手
/%E6%88%AA%E5%9B%BE/%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B.png)
-
四次挥手
/%E6%88%AA%E5%9B%BE/%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B.png)
-
超时重传
/%E6%88%AA%E5%9B%BE/%E8%B6%85%E6%97%B6%E9%87%8D%E4%BC%A0%E6%9C%BA%E5%88%B6.png)
面试题
- 1.tcp和udp的区别
- 答:tcp是面向连接的,可靠的,基于字节流的传输层协议。而udp是一个面向无连接的协议,tcp是有状态的可控制的具备重传功能的协议
- 2.tcp的三次握手和四次挥手的主机状态
- 同上
- 3.为什么不是两次握手?
- 答:缺少第三次握手会使服务端无法确认客户端的接收能力
- 4.为什么不是四次握手?
- 答:三次足够确认状态,再多也可以就是多余
- 5.第三次握手中可以携带数据吗?
- 答:第三次握手时可以携带数据,前两次不能携带。第三次握手时客户端已经处于established状态,并且已经能够确认服务器的接收,发送能力正常,这个时候相对安全,可以携带数据
- 6.四次挥手时等待2MSL的意义?
- 答:如果不等待,客户端直接跑路,当服务器还有很多数据包要给客户端,并且已经在路上的时候,之前客户端请求端口被其他应用占有后会接收到此无用数据,会造成数据包混乱。
- 7.为什么不是1MSL而是2MSL?
- 答:一个MSL确保四次挥手中主动关闭方最后的ACK报文能够到达对方,一个MSL确保对端没有收到ACK重传的FIN报文可以最终到达对端,这就是2MSL的意义。
- 8.为什么不是三次挥手?
- 答:因为服务端接收到FIN后不会立即返回FIN,必须要等服务器端的所有报文发送完之后才会发送。因此第二次挥手代表已经接收到FIN报文,延迟一段时间才会主动发FIN报文,因此造成4次挥手。 如果是三次挥手呢?等于说服务端将ACK和FIN的发送合并为一次挥手,这个时候长时间的延迟会导致客户端误以为FIN为接收,会不断进行重试

浙公网安备 33010602011771号