计算机网络(四)运输层(TCP/IP)

进程间的通信

        运输层向它上面的应用层提供通信服务;通信的实体是两台主机的进程之间在数据交换

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

                运输层还要对收到的报文进行差错检测(网络层只校验首部而不校验数据报)

                运输层向高层用户屏蔽了下面网络核心的细节;TCP可以视为一条全双工可靠信道,UDP可以视为一条不可靠信道

 运输层主要协议

        TCP传输控制协议、UDP用户数据报协议

         应用层语运输层之间的对照关系

         运输层的端口

                复用:应用层所有应用进程都可以通过运输层再传送刀网络层

                分用:运输层从网络层收到数据后发送给各应用

                协议端口号(端口),是软件端口(应用层各种协议进程与运输实体进行交互的一种地址);所有采用此协议的进程都有源端口目标端口两个重要字段

                        TCP/IP用一个16位的端口号来标志端口(端口号只具备本地意义,不同计算机的相同端口之间没有关联,允许65535个不同的端口号),端口号分为两种

                        服务端使用的端口号

                                熟知端口号/系统端口号(0~1023)

                                 登记端口号(1024~49151)

                        客户端使用的端口号

                                短暂端口号(49152~65535),在客户京城运行时才会动态选择

用户数据报协议UDP

        特点:        1.无连接(减少了开销和发送数据之前的时延)

                           2.尽最大努力交付(不保证可靠交付,主机不需要维持复杂的连接状态)

                           3.面向报文的应用层交付的报文并不会拆分、合并,而是保留报文边界(无论多长的报文UDP都会原样发送;报文太长或太短都会降低IP层的效率<分片/首部相对长度太长>)

                           4.没有拥塞控制(适合允许一定数据丢失却要求不能太大延迟的通讯)

                           5.支持一对一、一对多、多对多的交互通信

                           6.首部开销小(仅8字节,TCP有20个字节)

         UDP首部格式

                1.源端口号:要求对方回信时使用,不需要可以用全0

                2.目标端口号:不能为0

                3.长度:最小值为8(仅首部)

                4.检验和:检测传输是否出错,出错则废弃

                 UDP的端口分用

                 如果端口号不正确(不存在进程),则丢弃报文,并由网际控制报文协议ICMP发送“端口不可到达”错误报文

                UDP不需要套接字

                UDP用户在计算校验和时,要在UDP用户数据报之前体检一个12字节的伪首部。UDP检验和是把首部和数据报一起检验(不同于IP数据报的检验只检验首部)

 传输控制协议TCP

        TCP的主要的特点:

                1.TCP是面向连接的运输层协议

                2.每一条TCP连接只能有两个端点,每一条TCP连接只能点对点

                3.TCP提供可靠交付的服务

                4.TCP提供全双工通信

                5.面向字节流,TCP中的“流”指的是流入到进程或从进程流出的字节序列

        TCP的连接

                TCP把了连接作为最基本的抽象。TCP连接的端点叫做套接字socket或者插口。

                        套接字socket = (IP地址:端口号)

                每一条TCP连接唯一地被通信两段的两个端点(即两个套接字)所确定。

                        TCP连接 :: = {socket1,socket2} = { (IP1:port1) , (IP2:port2) }

        可靠传输的工作原理

                特点:        1.传输信道不产生误差

                                   2.不管发送发的发送速度多快,接收方都来得及处理收到的数据

                停止等待协议:一个分组发送完成后停止发送,等待对方确认

                         在出错的情况下有以下三点

                                1.发送一个分组后,必须暂存已发送分组的副本,直到接收到确认信号

                                2.分组和确认分组都必须有编号

                                3.超时计时器设定的重传时间应比正常往返时间长一点(以规避较大延迟和拥塞)

                        确认丢失和确认迟到

                                B因某种原因(数据丢失/网络拥塞没及时确认)收到了两个数据报M和M1,应执行以下动作:

                                1.丢弃这个重复的M1,不向上层交付

                                2.向A发送确认

                 信道利用率

                         信道利用率公式

                         流水线传输可以提高信道利用率(连续ARQ协议和滑动窗口协议)

                         连续ARQ协议

                                 分组发送按照分组序号从小到大发送,位于发送窗口中的5组数据都可连续发送,无需等待确认

                                接收到第一个分组的确认后,可以将发送窗口向前移动一位,接收方一般采用累积确认的方式(不用逐个发送确认,对按序到达的最后一个分组发送确认即可--全到了)

                TCP报文段的首部格式

                         TCP首部最小长度为20字节

                        远端口和目的端口:各占2字节

                        序号:占4字节,此字段的数值为报文段数据的第一个字节的序号(报文段序号)

                        确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号

                         数据偏移:占4位,TCP报文段起始距整个报文段的起始处有多远

                        保留:占6位,目前置0

                        紧急URG:URG=1时,表明紧急指针字段有效(高优先级),需要配合首部中的紧急指针字段使用

                        确认ACK:ACK=1时有效,建立连接后的ACK都必须置1

                        推送PSH:尽快发送,而不会等到缓存填满后统一发送

                        复位RST:RST=1时,TCP连接出现严重问题,必须释放

                        同步SYN:在连接建立时用来同步序号;SYN=1&ACK=0时,此连接为请求报文段,建立连接后SYN=1&ACK=1

                        终止FIN,FIN=1时表明发送已结束,要求释放连接

                        窗口:占2字节,报文的接收值窗口(以字节为单位)其中明确指出了现在允许对方发送的数据量,窗口值的量在动态变化

                        检验和:占2字节

                        紧急指针:占2字节,URG=1时才有效,所有紧急数据处理完之后才会处理正常数据(即使窗口为0也可以发送吉恩几数据)

                        选项:长度可变,最长可达40字节,当没有选项时,TCP首部长度是20字节

                                TCP最初之规定了一种选项:最大报文段长度MSS;后续增加了窗口扩大选项、时间戳选项、选择确认

                TCP可靠传输的实现

                        1.以字节为单位的滑动窗口

                                发送窗口内的数据都会被暂存,等待重发 

                                 1.A的发送窗口根据B的接收窗口来确定,但是并不严格等于B的接收窗口。A还可根据网络拥塞情况适当减小自己的发送窗口

                                 2.对不按序到达的数据应该如何处理,TCP并无明确规定,TCP会将不按序到达的数据临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层

                                  3.TCP要求接收方必须有累积确认功能

                超时重传时间的选择

                        

                                         RTT为报文段的往返时间,RTTs为加权平均往返时间

                               超时重传时间RTO  

                                        RTTD是RTT偏差的加权平均值

                                

 

                 选择确认SACK

                        当接收到的字段不全时,可以指明至多4盖字节块的边界信息(8段边界)

TCP的流量控制(发送方别太快了)

        利用滑动窗口实现流量控制

                接收窗口为0的时候会停止发送

 TCP的传输效率

        略

 TCP的拥塞控制

        拥塞控制的一般原理

                

                拥塞控制的实质就是防止过多的数据被注入网络中(拥塞控制是全局性的,不同于流量控制<点对点>)

                 拥塞控制分为闭环和开环两种

                        闭环控制基于反馈换路,主要措施如下:

                                1.检测网络系统以便检测到拥塞何时何处发生

                                2.把拥塞发生的信息送到可能采取行动的地方

                                3.调整整个网络系统解决出现的问题

                TCP的拥塞控制方法

                        慢开始        拥塞避免

                                基于窗口的拥塞控制:发送发维持一个拥塞窗口,发送方让自己的发送窗口等于拥塞窗口

                                慢开始:试探性的逐步增大发送窗口。在慢开始算法后,每经过一个传输轮次,拥塞窗口cwnd就加倍(传输轮次就是RTT)

                                 拥塞避免:让拥塞窗口缓慢增大,每经过一个往返时间RTT,发送方的拥塞窗口+1(比慢开始的增长速率缓慢得多)

 

                        快重传

                        快恢复

        主动队列管理AQM

                当队列值超过某个阈值时开始丢弃后面到达的分组(提醒对方发慢点),具体做法如下(随机早起检测RED)

                        1.若平均队列长度小于最小门限,则把新到达的分组放入队列中进行排队

                        2.若平均队列长度超过最大门限,则把新到达的分组丢弃

                        3.若平均队列长度置于两者之间,则随机丢弃新到达的分组

TCP的连接管理

        TCP的连接建立(三次握手)

 

                 1.B的TCP服务器进程创建TCB(传输控制模块),准备接受客户端的连接请求。然后服务器进入LISTEN(收听状态)

                 2.A的客户端进程童颜创建TCB,,向B发送请求(SYN=1,同时选择一个初始序号seq=x,不携带数据,但会消耗掉一个序号),TCP客户端进入SYN-SENT(同步已发送)状态

                3.B收到请求后,向A发送确认(SYN和ACK均置1,确认号ack=x+1,同时自己选择一个初始序号seq=x,同样不携带数据且消耗一个序号),服务器进入SYN-RCVD状态。

                        A收到B的确认后,还要向B发送确认(ACK=1,ack=y+1,自己的seq=x+1),A进入ESTABLISHED(已建立连接)

                        B收到消息后同样进入ESTABLISHED(已建立连接)

        TCP连接释放(四次挥手)

                 1.A向B发送连接释放报文,并停止发送数据,主动关闭TCP连接(FIN=1,seq=u<已传输的数据的最后一个字节序号+1>),A进入FIN-WAIT-1(终止等待1)

                2.B收到了连接释放报文后进行确认(确认号ack=u+1,v=最后一个发送的字符序号+1),然后B进入CLOSE-WAIT(关闭等待)

                3.A收到B的确认后进入FIN-WAIT-2(终止等待2),等待B发出连接释放报文

                4.B发出连接释放报文(FIN=1,且重复已经发送过的确认号ack=u+1),B进入LAST-ACK(最后确认),等待A的确认

                5.A收到释放报文后,对此进行确认(ACK=1,ack=w+1,seq=u+1),进入TIME-WAIT(时间等待)<此时连接并未被释放,需要等待2MSL后才能释放,SML为最长报文段寿命>

                        等待2SML的原因:确保最后一个ACK报文段能送达B,未送到B会重传FIN+ACK

                                                       确保本连接持续时间内所有的报文都从网络上消失

                        B只要收到A发出的确认就会进入CLOSE状态,B的连接比A要早

                TCP还有一个保活计时器,确保连接不发生故障

TCP的有限状态机

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值