1、各协议报文格式介绍各协议报文格式介绍以太网的两个标准以太网的两个标准lDIXEthernetV2是世界上第一个局域网产品(以太网)的规约。lIEEE的802.3标准。lDIXEthernetV2标准与IEEE的802.3标准只有很小的差别,因此可以将802.3局域网简称为“以太网”。l严格说来,“以太网”应当是指符合DIXEthernetV2标准的局域网1.MAC 帧的格式l常用的以太网MAC帧格式有两种标准:DIXEthernetV2标准IEEE的802.3标准l最常用的MAC帧是以太网V2的格式。以太网MAC帧物理层MAC层10101010101010 101010101010101010
2、11前同步码帧开始定界符7字节1字节8字节插入IP层目的地址 源地址类型数据FCS6624字节461500IP数据报MACMAC帧帧以太网的MAC 帧格式MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式目的地址字段6字节MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式源地址字段6字节MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式类型字段2字节类型字段用来标志上一
3、层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式数据字段461500字节数据字段的正式名称是 MAC 客户数据字段最小长度 64 字节 18 字节的首部和尾部=数据字段的最小长度 MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式FCS字段4字节当传输媒体的误码率为1108时,MAC子层可使未检测到的差错小于11014。当数据字段的长度小于46字节时,应在数据字段的后面加入
4、整数字节的填充字段,以保证以太网的MAC帧长不小于64字节。MAC 帧物理层MAC 层IP 层目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网V2的MAC帧格式10101010101010 10101010101010101011前同步码帧开始定界符7 字节1 字节8 字节插入在帧的前面插入的8字节中的第一个字段共7个字节,是前同步码,用来迅速实现MAC帧的比特同步。第二个字段是帧开始定界符,表示后面的信息就是MAC帧。为了达到比特同步,在传输媒体上实际传送的要比MAC帧还多8个字节l数据字段的长度与长度字段的值不一致;l帧的长度不是整数个字节;l用收到的帧检验序列F
5、CS查出有差错;l数据字段的长度不在461500字节之间。l有效的MAC帧长度为641518字节之间。l对于检查出的无效MAC帧就简单地丢弃。以太网不负责重传丢弃的帧。无效的MAC帧2.IP地址与硬件地址TCP报文IP数据报MAC帧应用层数据首部首部尾部首部链路层及以下使用硬件地址硬件地址网络层及以上使用IP地址IP地址IP数据报的格式l一个IP数据报由首部和数据两部分组成。l首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。l在首部的固定部分的后面是一些可选字段,其长度是可变的。固定部分可变部分04816192431版本标志生存时间协议标识区分服务总长度片偏移填充首部检验和源
6、地址目的地址可选字段(长度可变)位首部长度数据部分数据部分首部IP数据报首部发送在前可变部分首部04816192431版本标志生存时间协议标识区分服务总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分数据部分首部IP数据报固定部分发送在前首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分数据部分首部IP数据报固定部分可变部分区分服务发送在前首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分版本占4
7、位,指IP协议的版本目前的IP协议版本号为4(即IPv4)区分服务1.IP数据报首部的固定部分中的各字段首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分首部长度占4位,可表示的最大数值是15个单位(一个单位为4字节)因此IP的首部长度的最大值是60字节。区分服务首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分区分服务占8位,用来获得更好的服务在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个
8、字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 区分服务首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分总长度占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节。总长度必须不超过最大传送单元MTU。区分服务首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分标识(identification)占16位,它是一个计数
9、器,用来产生数据报的标识。区分服务首部04816192431版本标志生存时间协议标识区分服务总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分标志(flag)占3位,目前只有前两位有意义。标志字段的最低位是MF(MoreFragment)。MF1表示后面“还有分片”。MF0表示最后一个分片。标志字段中间的一位是DF(DontFragment)。只有当DF0时才允许分片。首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分片偏移(12位)指出:较长的分组在分片后
10、某片在原分组中的相对位置。片偏移以8个字节为偏移单位。区分服务偏移=0/8=0偏移=0/8=0偏移=1400/8=175偏移=2800/8=350140028003799279913993799需分片的数据报数据报片1首部数据部分共3800字节首部1首部2首部3字节0数据报片2数据报片314002800字节0【例4-1】IP数据报分片首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分生存时间(8位)记为TTL(TimeToLive)数据报在网络中可通过的路由器数的最大值。区分服务首部048161924
11、31版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分协议(8位)字段指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程区分服务运输层网络层首部TCPUDPICMPIGMPOSPF数据部分IP数据报协议字段指出应将数据部分交给哪一个进程首部04816192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分首部检验和(16位)字段只检验数据报的首部不检验数据部分。这里不采用CRC检验码而采用简单的计算方法。区分服务首部048
12、16192431版本标志生存时间协议标识总长度片偏移填充首部检验和源地址目的地址可选字段(长度可变)位首部长度数据部分固定部分可变部分源地址和目的地址都各占4字节区分服务5.1运输层协议概述5.1.1进程之间的通信l从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。l当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。运输层为相互通信的应用进程提供了逻辑通信54321运输层提供应用进程间的逻辑通信主机A主
13、机B应用进程应用进程路由器1路由器2AP1LAN2WANAP2AP3AP4IP层LAN1AP1AP2AP4端口端口54321IP协议的作用范围运输层协议TCP和UDP的作用范围AP3应用进程之间的通信l两个主机进行通信实际上就是两个主机中的应用进程互相通信。l应用进程之间的通信又称为端到端的通信。l运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。l“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层协议和网络层协议的
14、主要区别应用进程应用进程IP协议的作用范围(提供主机之间的逻辑通信)TCP和UDP协议的作用范围(提供进程之间的逻辑通信)因特网运输层的主要功能l运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。l运输层还要对收到的报文进行差错检测。l运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。两种不同的运输协议l运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。l当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种
15、逻辑通信信道就相当于一条全双工的可靠信道。l当运输层采用无连接的UDP 协议时,这种逻辑通信信道是一条不可靠信道。TCP/IP的运输层有两个不同的协议:(1)用户数据报协议UDP(UserDatagramProtocol)(2)传输控制协议TCP(TransmissionControlProtocol)5.1.2运输层的两个主要协议l两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU(TransportProtocolDataUnit)。lTCP传送的数据单位协议是TCP报文段(segment)lUDP传送的数据单位协议是UDP报文或用户数据报。TCP与UDPTCP/IP体系中
16、的运输层协议TCPUDPIP应用层与各种网络接口运输层TCP与UDPlUDP在传送数据之前不需要先建立连接。对方的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP是一种最有效的工作方式。lTCP则提供面向连接的服务。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。还要强调两点l运输层的UDP用户数据报与网际层的IP数据报有很大区别。IP数据报要经过互连网中许多路由器的存储转发,但UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的
17、。lTCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了TCP连接。5.1.3运输层的端口l运行在计算机中的进程是用进程标识符来标志的。l运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在因特网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。l为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志。需要解决的问题l由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机
18、器上的进程。l有时我们会改换接收报文的进程,但并不需要通知所有发送方。l我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。端口号(protocolportnumber)简称为端口(port)l解决这个问题的方法就是在运输层使用协议端口号(protocolportnumber),或通常简称为端口(port)。l虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP来完成。软件端口与硬件端口l在协议栈层间的抽象的协议端口是软件端口。l路由器或交换机上的端口是硬件
19、端口。l硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。TCP的端口l端口用一个16位端口号进行标志。l端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。三类端口l熟知端口,数值一般为01023。l登记端口号,数值为102449151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在IANA登记,以防止重复。l客户端口号或短暂端口号,数值为4915265535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束
20、后,这个端口号可供其他客户进程以后使用。5.2用户数据报协议UDP5.2.1UDP概述lUDP只在IP的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。l虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点。UDP的主要特点lUDP是无连接的,即发送数据之前不需要建立连接。lUDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。lUDP是面向报文的。UDP没有拥塞控制,很适合多媒体通信的要求。lUDP支持一对一、一对多、多对一和多对多的交互通信。lUDP的首部开销小,只有8个字节。面向报文的UDPl发送方UDP对应用程序交下来的报文,在添加首
21、部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。l应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。l接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。l应用程序必须选择合适大小的报文。UDP是面向报文的IP数据报的数据部分IP首部IP层UDP首部UDP用户数据报的数据部分运输层应用层报文应用层5.2.2UDP的首部格式伪首部源端口目的端口长度检验和数据首部UDP长度源IP地址目的IP地址017IP数据报字节44112122222字节发送在前数据首部UDP用户数据报UD
22、P基于端口的分用IP层UDP数据报到达端口2端口3端口1UDP分用5.3传输控制协议TCP概述5.3.1TCP最主要的特点lTCP是面向连接的运输层协议。l每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。lTCP提供可靠交付的服务。lTCP提供全双工通信。l面向字节流。7 68HTCP面向流的概念发送 TCP 报文段发送方接收方把字节写入发送缓存从接收缓存读取字节应用进程应用进程1230181716151419202145131211H109 H加上 TCP 首部构成 TCP 报文段TCPTCP字节流字节流H表示 TCP 报文段的首部x表示序号为
23、x 的数据字节TCP 连接应当注意lTCP连接是一条虚连接而不是一条真正的物理连接。lTCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。lTCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。lTCP可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。5.3.2TCP的连接lTCP把连接作为最基本的抽象。l每一条TCP连接有两个端点。lTCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。l端口号拼
24、接到(contatenatedwith)IP地址即构成了套接字。TCP可靠通信的具体实现lTCP连接的每一端都必须设有两个窗口一个发送窗口和一个接收窗口。lTCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是基于报文段。lTCP两端的四个窗口经常处于动态变化之中。lTCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。TCP首部20字节的固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FIN32位SYNRSTPSHACKURG位08162431填充TCP数据部分TCP首部TCP报文段IP数据部分IP首部发送在
25、前5.5TCP报文段的首部格式TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充源端口和目的端口字段各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充序号字段占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。TCP首部20字节固定
26、首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认号字段占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充数据偏移(即首部长度)占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位字(以4字节为计算单位)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留
27、FINSYNRSTPSHACKURG位08162431填充保留字段占6位,保留为今后使用,但目前应置为0。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充紧急URG当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认ACK只有当ACK1时确认号字段才有效。当ACK0时,确认号无效。T
28、CP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充推送PSH(PuSH)接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充复位RST(ReSeT)当RST1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。TCP首部20字节固定首部目的端口数据
29、偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充同步SYN同步SYN=1表示这是一个连接请求或连接接受报文。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充终止FIN(FINis)用来释放一个连接。FIN1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充窗口字段
30、占2字节,用来让对方设置发送窗口的依据,单位为字节。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充检验和占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充紧急指针字段占16位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。TCP首部20字节固定
31、首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充选项字段长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。其他选项l窗口扩大选项占3字节,其中有一个字节表示移位值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。l时间戳选
32、项占10字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充填充字段这是为了使整个首部长度是4字节的整数倍。TCP的流量控制利用滑动窗口实现流量控制l一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。l流量控制(flowcontrol)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。l利用滑动窗口机制可以很方便地在TCP连
33、接上实现流量控制。以字节为单位的滑动窗口前移不允许发送已发送并收到确认A的发送窗口=20允许发送的序号26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56B期望收到的序号前沿后沿前移收缩根据B给出的窗口值A构造出自己的发送窗口TCP标准强烈不赞成发送窗口前沿向后收缩不允许发送已发送并收到确认A的发送窗口位置不变允许发送但尚未发送26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
34、49 50 51 52 53 54 55已发送但未收到确认56P1P2P3不允许接收已发送确认并交付主机B的接收窗口允许接收26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56未按序收到可用窗口A发送了11个字节的数据P3P1=A的发送窗口(又称为通知窗口)P2P1=已发送但尚未收到确认的字节数P3P2=允许发送但尚未发送的字节数(又称为可用窗口)允许发送但尚未发送A的发送窗口向前滑动26 27 28 29 30 31 32 33 34 35 36 37 38 3
35、9 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送并收到确认不允许发送已发送但未收到确认56P1P2P3允许接收B的接收窗口向前滑动26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送确认并交付主机不允许接收56未按序收到A收到新的确认号,发送窗口向前滑动先存下,等待缺少的数据的到达不允许发送已发送并收到确认A的发送窗口已满,有效窗口为零26 27 28 29 30 31 32 33 34 35 36 37 3
36、8 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55已发送但未收到确认56P1P2P3A的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送。发送缓存最后被确认的字节发送应用程序发送缓存最后发送的字节发送窗口已发送已发送已发送TCP序号增大接收缓存接收应用程序已收到已收到接收窗口TCP接收缓存下一个读取的字节序号增大下一个期望收到的字节(确认号)发送缓存与接收缓存的作用l发送缓存用来暂时存放:发送应用程序传送给发送方TCP准备发送的数据;TCP已发送出但尚未收到确认的数据。l接收缓存用来暂时存放:按序到达的、但尚未被接收应用程序读取的
37、数据;不按序到达的数据。需要强调三点lA的发送窗口并不总是和B的接收窗口一样大(因为有一定的时间滞后)。lTCP标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。lTCP要求接收方必须有累积确认的功能,这样可以减小传输开销。TCP的运输连接管理1.运输连接的三个阶段l运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。l连接建立过程中要解决以下三个问题:要使每一方能够确知对方的存在。要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。能够
38、对运输实体资源(如缓存大小,连接表中的项目等)进行分配。客户服务器方式lTCP连接的建立都是采用客户服务器方式。l主动发起连接建立的应用进程叫做客户(client)。l被动等待连接建立的应用进程叫做服务器(server)。用三次握手建立TCP连接SYN=1,seq=xCLOSEDCLOSED主动打开被动打开AB客户服务器5.9.1TCP的连接建立A的TCP向B发出连接请求报文段,其首部中的同步位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x。用三次握手建立TCP连接SYN=1,seq=xCLOSEDCLOSED主动打开被动打开AB客户服务器5.9.1TCP的连接建立
39、SYN=1,ACK=1,seq=y,ack=x 1B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中应使SYN=1,使ACK=1,其确认号ack=x1,自己选择的序号seq=y。SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDCLOSED主动打开被动打开AB客户服务器SYN=1,ACK=1,seq=y,ack=x 1A收到此报文段后向B给出确认,其ACK=1,确认号ack=y1。A的TCP通知上层应用进程,连接已经建立。SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDCLOSED数据传送主动打开被动打开AB客户服务器SY
40、N=1,ACK=1,seq=y,ack=x 1B的TCP收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立。SYN-SENTESTAB-LISHEDSYN-RCVDLISTENESTAB-LISHED用三次握手建立TCP连接的各状态SYN=1,seq=xACK=1,seq=x+1,ack=y 1CLOSEDCLOSED数据传送主动打开被动打开AB客户服务器5.9.1TCP的连接建立SYN=1,ACK=1,seq=y,ack=x 1FIN=1,seq=uCLOSED主动关闭数据传送ESTAB-LISHEDESTAB-LISHEDAB客户服务器CLOSED5.9.2TCP 的连接释放数据
41、传输结束后,通信的双方都可释放连接。现在A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN=1,其序号seq=u,等待B的确认。FIN=1,seq=uACK=1,seq=v,ack=u 1主动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器5.9.2TCP 的连接释放B发出确认,确认号ack=u1,而这个报文段自己的序号seq=v。TCP服务器进程通知高层应用进程。从A到B这个方向的连接就释放了,TCP连接处于半关闭状态。B若发送数据,A仍要接收。FIN=1,seq=uACK=1,seq=v,a
42、ck=u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送5.9.2TCP 的连接释放若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。FIN=1,seq=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送5.9.2TCP 的连接释放A收到连接释放报文段后,必须发出确认。ACK=1,seq=u+1,ack=w 1FIN=1,seq
43、=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送5.9.2TCP 的连接释放在确认报文段中ACK=1,确认号ackw1,自己的序号seq=u+1。ACK=1,seq=u+1,ack=w 1CLOSEDACK=1,seq=u+1,ack=w 1FIN=1,seq=uACK=1,seq=v,ack=u 1FIN=1,ACK=1,seq=w,ack=u 1FIN-WAIT-1CLOSE-WAITFIN-WAIT-2LAST-ACK等待 2MSLTIME
44、-WAIT主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送CLOSED5.9.2TCP 的连接释放TCP连接必须经过时间2MSL后才真正释放掉。常见端口号1.20FTP(文件传输协议)数据端口2.21FTP(文件传输协议)控制端口3.22SSH安全Shell服务4.23telnetTelnet(终端仿真服务)5.25SMTP简单邮件传输协议(SMTP)6.53DNS域名解析服务(如BIND)7.67DHCP动态主机配置协议服务使用8.68DHCP动态主机配置协议客户使用9.69TFTP简单文件传输协议10.80HTTP用于万维网(WWW
45、)服务的超文本传输协议11.110POP3邮局协议版本312.143IMAP互联网消息存取协议13.161SNMP简单网络管理协议14.179BGP边界网络协议15.443https安全超文本传输协议16.520RIP路由信息协议Wireshark抓包工具的使用lwireshark是一款抓包软件,比较易用,在平常可以利用它抓包,分析协议或者监控网络,是一个比较好的工具。(1)Wireshark的启动界面和抓包界面的启动界面和抓包界面抓包界面的启动按file下面的按钮之后会出现l这个是网卡的显示,因为我有虚拟机所以会显示虚拟网卡,我们现在抓的是真实网卡上的包所以在以太网卡右边点击start开始抓
46、包这个就是抓包的界面了(也是主界面)(2)Wireshark主窗口由如下部分组成:主窗口由如下部分组成:l菜单用于开始操作。l主工具栏提供快速访问菜单中经常用到的项目的功能。lFitertoolbar/过滤工具栏提供处理当前显示过滤得方法。lPacketList面板显示打开文件的每个包的摘要。点击面板中的单独条目,包的其他情况将会显示在另外两个面板中。lPacketdetail面板显示您在Packetlist面板中选择的包的更多详情。lPacketbytes面板显示您在Packetlist面板选择的包的数据,以及在Packetdetails面板高亮显示的字段。l状态栏显示当前程序状态以及捕捉数
47、据的更多详情。抓包列表抓包列表l封包列表中显示所有已经捕获的封包。在这里您可以看到发送或接收方的MAC/IP地址,TCP/UDP端口号,协议或者封包的内容。如果捕获的是一个OSIlayer2的封包,您在Source(来源)和Destination(目的地)列中看到的将是MAC地址,当然,此时Port(端口)列将会为空。l如果捕获的是一个OSIlayer3或者更高层的封包,您在Source(来源)和Destination(目的地)列中看到的将是IP地址。Port(端口)列仅会在这个封包属于第4或者更高层时才会显示。您可以在这里添加/删除列或者改变各列的颜色:Editmenu-Preference
48、s(3).封包详细信息封包详细信息这里显示的是在封包列表中被选中项目的详细信息。信息按照不同的OSIlayer进行了分组,您可以展开每个项目查看。ps:wireshark会用不难,难的是会看懂这些包(如果对这些包头信息不了解的可以自己去查查资料)16进制数据进制数据“解析器”在Wireshark中也被叫做“16进制数据查看面板”。这里显示的内容与“封包详细信息”中相同,只是改为以16进制的格式表述。(3)我们还要学会在大量的信息中过滤和分我们还要学会在大量的信息中过滤和分析我们需要的信息析我们需要的信息过滤:过滤:l过滤器会如此重要。它们可以帮助我们在庞杂的结果中迅速找到我们需要的信息。l-捕
49、捉过滤器:用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。l-显示过滤器:在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。l两种过滤器的目的是不同的。l1.捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。l2.显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。1.捕捉过滤器捕捉过滤器l设置捕捉过滤器的步骤是:-选择capture-options。-填写capturefilter栏或者点击capturefilter按钮为您的过滤器起一个名字并保存,以便在今后的捕捉中继续使用这个过滤器。-点击
50、开始(Start)进行捕捉。l语法:Protocol Direction Host(s)Value Logical Operations Other expression_rl例子:tcpdst10.1.1.180andtcpdst10.2.2.23128 Protocol(协议)(协议):可能的值:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcpandudp.如果没有特别指明是什么协议,则默认使用所有支持的协议。Direction(方向)(方向):可能的值:src,dst,srcanddst,srcordst如果没有特别指明来源或目的