协议概述

TCP是一种传输控制协议 是一种面向连接的、可靠的、基于字节流的传输层通信协议

UDP是一种用户数据报协议 是一种无连接、不可靠(可靠性可由应用层负责校验)

组播和广播不能基于TCP

比如说BGP(边界网关协议)携带的路由信息较多,需要跨不同网络发送,且需要保证可靠性,故基于TCP;

OSPF不基于UDP也不基于TCP。TA基于IP协议!

RIP因为需要周期性全网组播路由信息,路由信息数目巨大,故使用UDP协议保证效率。

计算机生成了可选文字:
Client 
SYN_SENT 
( connect( ) ) 
ESTABLISHED 
( write( ) ) 
FIN WAIT 1 
( close( ) ) 
TIME_WAIT 
SYN seq=x 
SYN seq=y, ACK=x * 1 
ACK=y + 1 
seq=x+l ACKzy 1 
ACKx + 
FIN 1 
FIN s 
ACK=y + 2 
Server 
LISTEN 
( listen( ) ) 
SYN_RCVD 
ESTABLISHED 
( read( ) ) 
CLOSE WAIT 
LAST ACK 
( close( ) )

报文头部

  • TCP头部
源 端 ロ 号 ( 16 位 ) 
首 部 任 度 
保 留 ( 6 位 ) 
( 4 位 ) 
校 論 和 ( 16 位 ) 
TCP 美 部 格 式 
序 列 号 ( 32 位 ) 
確 圦 答 号 ( 32 位 ) 
し A P R 5 F 
こ 5 5 Y 1 
G K H T N N 
選 項 ( 度 可 変 ) 
数 据 
目 ほ 端 ロ 号 ( 16 位 ) 
窗 ロ 大 小 ( 16 位 ) 
漿 急 指 針 ( 16 位 )
  • UDP头部
源 端 ロ 号 ( 16 位 ) 
包 度 ( 16 位 ) 
U DP 美 部 格 式 
目 端 ロ 号 ( 16 位 ) 
校 驗 和 ( 16 位 ) 
数 据
  • TCP和UDP的区别
    1. 连接
      1. TCP面向连接,传输数据前需要先建立连接
      2. UDP不需要连接,直接传输数据
    2. 服务对象
      1. TCP是一对一,一条连接两个端点
      2. UDP支持一对一、一对多、多对多的交互通信
    3. 可靠性
      1. TCP可靠交付数据
      2. UDP尽力而为,不保证可靠性
    4. 拥塞控制、流量控制
      1. TCP有拥塞控制和流量控制机制,保证传输安全性
      2. UDP没有,即时网络拥塞了,也不会影响UDP的发送速率
    5. 头部开销
      1. TCP头部没有使用(选项)字段长度为20字节,使用(选项)长度更长
      2. UDP头部8字节,并且是固定不变的,开销小
  • 为什么关闭连接要设计成四次?

相较于TCP三次握手,TCP挥手时需要释放两端的资源(内存、端口等),因此多了个对端的FIN状态

  • 服务端运行一段时间后,套接字出现了大量的Close_Wait状态,最有可能是什么原因导致的?

对端收到FIN

  • 为什么基于TCP的程序往往都有个应用层的心跳检测机制?

TCP建立连接后,只是在两端的内核里维持TCP信息,实际上并没有一个物理的链接通路,对端这时候挂了,谁也不知道      ["你是否还活着?挂了的话我就把你踢掉释放资源了"]

  • 服务端的Time_Wait状态再哪个阶段出现?持续多久?为什么要设计这么一个状态?
    • 本端已经发送最后一个ACK后出现,等待一段时间关闭,一般持续时间为2MSL。因为这时候不确定ACK对端是否能收到,保持连接的话对端没收到ACK还会重发
    • 如果这时候对端还有半路上没到本端的信息化,本端关闭时如果有同样端口的服务起来,那就错乱了(实际上是不可能的,因为ACK是按照时间累加的,这里做保险)
  • 如何唯一确定一个TCP连接?
    • 源地址
    • 源端口
    • 目的地址
    • 目的端口

通过地址确定对方主机 后 通过端口确定进程

  • 为什么需要TCP协议?TCP工作在哪一层?

因为TCP是一个工作在传输层的可靠传输的服务,他能确保无损坏、无间隔、非冗余和按序的

  • 什么用TCP?

TCP是面向连接的、可靠的、基于字节流的传输层通信协议

  • 面向连接:一定是[一对一]才能连接,不像UDP协议 可以一个主机同时向多个主机发送消息
  • 可靠的:无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文能到达接收端
  • 字节流:消息是[没有边界]的,所以无论我们消息有多大都可以传输,并是有序的,当前一个消息没有收到的时候,及时后面的字节已经收到那么也不能扔给应用层处理,同时对重复的报文进行丢弃
  • 为什么TIME-WAIT等待时间是2MSL?

MSL≥TTL(确保报文自然消亡)、一来一回需要等待2倍时间。2MSL的时间是从客户端接收到FIN后发送ACK开始倒计时的。如果TIME-WAIT时间内,因为客户端的ACK没有到达服务端,客户端又接收到了服务端重发的FIN报文,那么2MSL重新倒计时。linux中2MSL默认60秒。

  • 为什么需要TIME_WAIT状态?
    1. 防止旧连接的数据包
    2. 保证连接正确关闭
  • TIME_WAIT过多有什么危害?
    1. 内存资源占用过多
    2. 端口资源占用过多,一个TCP连接至少消耗一个本地端口[32768--61000为可开启端口]

__________________2020/10/11日更新___________________________

华为防火墙的TCP UDP和ICMP协议创建会话情况

协议 开启状态检测关闭状态检测
TCPSYN报文创建会话,转发报文创建会话,转发报文
TCPSYN+ACK
ACK报文
不创建会话,丢弃报文创建会话,转发报文
UDP 创建会话,转发报文创建会话,转发报文
ICMPPing回显请求报文创建会话,转发报文创建会话,转发报文
ICMPPing回显应答报文不创建会话,丢弃报文创建会话,转发报文
ICMP其他ICMP报文不创建会话,转发报文不创建会话,转发报文

华为防火墙查看会话表 display firewall session table verbose

滑动窗口待更新

一条评论

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

富强民主文明和谐