网络协议笔记-运输层

【运输层为互相通信的应用进程提供逻辑通信】

  运输层有两个重要的功能,复用,分用;两个主机上多个应用进程之间互相通信。

  网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信

【端口和套接字的意义】

  在协议栈层间的抽象的协议端口是软件端口,俗称端口

  软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址

  TCP/IP的运输层用一个16位端口号来标识一个端口。端口只具有本地意义,互联网中不同的计算机中,相同的端口号没有关联的。

  16位的端口号允许有65535个不同的端口

  熟知端口号:0~1023,IANA指派给了TCP/IP最重要的一些应用程序;登记端口号:1024~49151,使用时必须在IANA按照规定的手续登记;剩下的叫短暂端口号,给客户进程短暂使用,进程运行的时候使用,关闭的时候就给其他进程使用。

【无连接的UDP特点】

  • 无连接;
  • 尽最大努力交付;UDP对应用层交下来的报文,既不合并也不拆分,永远都原样交付
  • 面向报文;
  • 没有拥塞控制,所以网络出现的拥塞不会使源主机的发送速率降低
  • 支持一对一、一对多、多对一、和多对多的交互通信
  • 首部开销小,只有8个字节
  • UDP的检验和是把首部和数据部分一起检验了,而IP数据报时值检验首部的

【面向连接的TCP的特点】

  • 面向连接的运输协议
  • 每一条TCP连接只能有两个端点,只能是点对点的
  • TCP提供可靠的交付服务,传输的数据,具有无差错、不丢失、不重复、并且按序到达。
  • TCP提供全双工通信
  • 面向字节流。TCP中的流指流入到进程或从进程流出的字节序列【面向字节流的含义:虽然应用程序和TCP的交互是一次一个数据 块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流】
  • TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节
  • 每条TCP连接的两个端点,叫做套接字(socket)或插口。根据RFC793定义:端口号拼接到IP地址即构成了套接字。

【在不可靠的网络上实现可靠传输的工作原理】

  理想的传输条件:1.传输信道不产生差错;2.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。

【地址等待协议】

  停止等待就是每发送一完一个分组就停止发送,等待对方的确认,在收到确认之后在发送下一个分组。

  停止等待协议是一种可靠的通信协议

  超时重传:发送方在发送完一个分组后,开启一个超时计时器,在计时器到期之前没有收到分组收到确认的信息,就认为分组丢失,就重新再发一遍分组,若在计时器到期之前收到了确认就撤销计时器。【1.发送后,保留发送的副本,重发时,加快发送速度;2.分组和确认分组要编号,以确认收到的是哪一个分组的确认;3.重传时间应该比传输平均往返时间长】

  停止等待协议的缺点就是信道利用率低

【ARQ协议】

  俗称滑动窗口协议

  假定一次发送五个分组,接收方采用累积确认的方式,接收方不比对每一个分组都发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示这个分组为止的分组都已经准确收到了。如果发送发发送了五个分组,但是中间第三个丢失了,接收方就发送第二个分组的确认,发送方就回退,从新发送后三个分组再加两个新的分组,组成五个分组再一起发送给接收方。

【TCP报文段的首部格式】

  TCP首部的最小长度是20字节。

  

  • 源端口和目的端口:各占2个字节
  • 序号:占4个字节。序号范围[0,2e32-1]。TCP是面向字节流的,在一个TCP连接中传送的字节流中每一个字节都按顺序编号。例如,一段报文段字段值为301,而携带的数据共有100字节,这表明本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400.显然下一个报文段的数据序号应当从401开始,即下一个报文段的序号字段值应该为401
  • 确认号:占4字节。是期望收到对方一下个报文段的第一个数据字节的序号。
  • 数据偏移:占4位。它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
  • 保留
  • 紧急。
  • 确认ACK:当ack=1时确认号字段才有效。当ack=0是确认号字段无效。
  • 推送:尽快推送向前,不必等到缓存区满了才发送
  • 复位:重新建立连接
  • 同步SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,这是一个连接请求报文段。若对方同意建立连接,则应在响应的报文段中使用SYN=1,ACK=1。SYN置为1表示这是一个连接请求或连接接收请求。
  • 终止FIN:用来释放一个连接。
  • 窗口:占2个字节。窗口指发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。
  • 检验和:占2个字节。检验和字段检验的范围包括首部和数据这两部分。
  • 紧急指针
  • 选项

【TCP的滑动窗口】

  • 以字节单位的滑动窗口
  • TCP建立连接时,接收方会告诉发送方自己的接收窗口大小(控制流量)
  • 假设发送方发送序号31到50的字节数据,接收方发送确认的序号是41,则表示 就是接收方已经收到序号为31到40的字节,希望从41号字节开始接收,然后发送方的窗口向前滑动使窗口值等于20,再发送序号41到60的字节
  • 发送方有发送缓存,接收方有接收缓存
  • 发送发会把发送出去的数据,继续保留在缓存中,若收到接收方发送的确认序号,则在缓存中删除收到确认的字节的缓存,如果没有收到直接从缓存中重新发送
  • 接收方在接收发送方发送的一段连续的数据时,可能因为网络的原因收到的数据不是连续的,这时候接收方不会把非连续的数据丢弃,而是放在自己的接收缓存中,等接收到了,再交给上层应用。
  • TCP是全双工通信,通信中的每一方都在发送和接收报文。

【TCP的流量控制】

  • 流量控制就是让发送的发送速率不要太快,要让接收方来得及接收
  • 利用滑动窗口机制来实现

【TCP的拥塞控制】

  • 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。
  • 拥塞控制就是防止过多的数据注入到网络中,这样可以事网络中的路由器或链路不致过载。
  • 发送方维持一个叫做拥塞窗口的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。(发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就可以再增大一点,只要网络出现了拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些。判断网络拥塞的依据就是出现了超时

  

  TCP的拥塞控制方法:

    • 慢开始:由小到达逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。发送发每次收到接收方的确认ack,就把拥塞窗口值+1
    • 拥塞避免算法:让拥塞窗口cwnd缓慢的增大,每经过一个往返时间RTT(表示传输轮次,拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对己方发送的最后一个字节的确认时间。)就把发送方的拥塞窗口cwnd加1。在拥塞避免阶段,拥塞窗口cwnd按线性规律缓慢增长。
    • 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。(快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认);【例如:发送了M1,收到确认M1,发送M2,收到确认M2,发送M3、丢失,发送M4,重复确认M2,发送M5,重复确认M2,发送M6,重复确认M2。快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文M3,因为立即进行重传。】
    • 快恢复:在收到三个重复确认时,发送方知道现在只是丢失了个别的报文段,不启动慢开始,而是执行快恢复算法,这时,发送方调整门限值,并开始执行拥塞避免算法。
    • 在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这常称为加法增大。而一旦出现超时或3个重复的确认,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。

【TCP的连接管理】

  在TCP连接建立过程中要解决的三个问题:

    • 要使每一方能够确知对方的存在
    • 要允许双方协商一些参数
    • 能够对运输实体资源进行分配。

    

    三次握手的描述:最初两端的TCP进程都处于closed状态。图中在主机下面的方框分别是TCP进程所处的状态。B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程处于LISTEN状态,等待客户的连接请求。如有,即做出响应。A的TCP客户进程也是首先创建传输控制模块TCB。

    (第一次握手):然后,在打算建立TCP连接时,向B发出连接请求报文段,这时首部的同步位SYN=1,同时选择一个初始号seq=x。TCP规定一个SYN报文段不能携带数据,但是仍然要消耗一个序号。这时,TCP客户进程进入SYN-SENT状态。

    (第二次握手):B在收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应该把SYN位和ACK位都置1,确认号ack=x+1,同时也为自己选择一个初始序号seq=y。这个报文段也不能携带数据,但同样要消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD状态。

    (第三次握手):TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1.TCP表中规定,ACK报文段可以携带数据。当B收到A的确认之后,A进入已建立连接状态。

  

  TCP的释放过程:

    

    • 第一次挥手:A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1.这是A进入FIN-WAIT-1状态。
    • 第二次挥手:B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后进入CLOSE-WAIT状态。现在是半关闭状态,A到B是关闭的
    • 第三次挥手:B这时已经没有什么要发送给A了,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。现在假定B的序号是w,因为A向B方向是关闭了TCP连接,但是B向A方向的TCP连接是没有关闭的,所以B有可能又发送了些数据。B还必须重复上次已发送过的确认号ack=u+1.
    • 第四次挥手:A在收到B的连接释放报文后,必须对此发出确认,在确认报文段中把ACK置1,确认号是ack=w+1,而自己的序号是seq=u+1。前面发送过的FIN报文段也要消耗一个序号

原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/8553215.html

时间: 2024-08-30 12:54:51

网络协议笔记-运输层的相关文章

网络协议笔记-数据链路层

[数据链路层的基本概念] 数据链路层中数据传输的单位是帧(frame) 链路是一条无源的点到点的物理线路段. 数据链路除了物理线路外,还必须有通信协议来控制这些数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据链路. 常见的方法是使用适配器(即网卡),来实现这些协议的硬件和软件 [数据链路层的主要目的] 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP发送RARP请求和接收RARP应答 [数据链路层主要功能] 链路管理:链路的建立.维持和释放

网络协议笔记-网络层-ARP协议

[2-地址解析协议ARP] [2.1-基本概念] 地址解析协议ARP的作用是根据主机的IP地址,找出该主机的硬件地址. [2.2-为什么要使用ARP] 在数据传输过程中,网络层使用的IP地址,但是在实际传输的时候,数据是从网络的数据链路上传送数据帧的(就是数据链路层所做的工作,七层网络结构中,数据从上往下移动),所以最终还是需要使用网络的硬件地址.因为七层网络结构中每一层都是黑盒的,所以在讨论数据在网络层传输的时候,就忽略了对数据链路层的讨论. [2.3-ARP的简要工作原理] 每一台主机都有一

网络协议笔记-网络层-路由器的作用、IP地址

1-[路由器在网际互连中的作用] 1.1-[直接交付和间接交付] 直接交付:当主机A要向另一个主机B发送数据报时,要先检查目的主机B是否与源主机连接在同一个网络上.如果是,就将数据报直接交付给目的主机B而不需要通过路由器. 简介交付:但如果目的主机与源主机A不是连在同一个网络上,则应将数据报发送给本网络上的某个路由器,由该路由器按照转发表指出的路由将数据报转发给下一个路由器,这就叫做简介交付. 1.2-[路由器的简单结构] 转发和路由选择的区别: 转发(forwarding)就是路由器根据转发表

网络协议笔记-物理层

[物理层] 这是计算机网络OSI模型中最低的一层.物理层规定:为传输数据所需要的物理链路创建.维持.拆除而提供具有机械的.电子的.功能的和规范的特性.简单的说,物理层确保确实的数据可在各种物理媒体上传输. [物理层的基本概念] 物理层的主要任务描述为确定与传输媒体的接口的一些特性: 机械特性:致命接口所用接线器的形状和尺寸.引线数目和排列.固定和锁定装置等等. 电器特性:指明在接口电缆的各条线上出现的电压范围. 功能特性:指明某条线上出现的某一电平的电压表示何种意义 规程特性:指明对于不同功能的

基础笔记(三):网络协议剖析

目录 一.网络协议 二.TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具 三.HTTP(HyperText Transfer Protocol,超文本传输协议) 请求报文结构 请求报文样例 请求报文参数详解 响应报文结构 响应报文样例 响应报文参数详解 HTTP报文抓取工具 Session和Cookie 四.相关资料 一.网络协议 国际标准化组织(International Standard O

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包

TCP/IP网络协议

什么是协议?协议就是双方约定的规则.同理,在网络中,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议. 下面是我百度的定义: TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议)协议, TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式.TCP/IP是INTERNET的基础协议,也

[国嵌攻略][068][tftp网络协议实现]

IP协议结构 UDP协议结构 TFTP协议结构 TFTP端口 读写请求端口: 69 其他请求端口:1024~65535 主程序 /******************************************************************** *名称:menu *参数: * none *返回: * none *功能:菜单命令 *********************************************************************/ voi

linux网络编程笔记——UDP

目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <malloc.h> #include <sys/types.h> #include <sys/socket