【计算机网络】传输层学习笔记二

三、TCP几个细节知识点

1.连接建立和释放时的sequence number和ack number

TCP是双工通信,一方再给另一方回ack的时候也同时会发信息

连接建立时,双方会初始化一个sequence序号,a clock-based scheme is used

发送的消息对方收到后,回的ack序号是下一个要收的包的序号

2.TCP滑动窗口的几个细节

(1)Nagle’s algorithm

发送方窗口的大小取决于接收方回的窗口号,但如果有的时候接收方一个一个窗口的挤,发送方就不得不连续发小包,但TCP头和IP头加起来起码20+20字节,这时候数据小传输效率低。那么为了避免发小包,就需要这个技术。Nagle’s algorithm就解决了这个问题。

Nagle’s algorithm发第一个包,然后就不发了,那什么时候接着发呢,两种情况,一种是第一个包的ack回来了,另一种是要么buffer里的包达到了窗口的一半,要么是包达到了最大段长度。这里有一个问题,buffer里的包达到了什么窗口的一半,本来不就打算发窗口大小的包,为什么是达到一半的时发?

这个算法有的时候是不适用的,比如玩游戏,这包不能等啊,这高延迟哪能受得了,这时候要么就禁用掉这个算法,要么就让这个包是push包。

(2)Clark’s solution

接收方的buffer如果每次上层只读一个窗口,那么就会空出来一个窗口,然后通知发送方我空出来窗口了,然后发送方就会发送这一个窗口的包,还是造成了低效,Clark’s solution解决了这个问题。

Clark’s solution会等接收方能够空出来一半buffer或能够空出来最大段长度的时候,在向发送方发ack告诉他窗口大小的改变。

Nagle’s algorithm和Clark’s solution配合使用。

(3)Fast Retransmission(快速重传)

TCP通常是等time out后再重传,但是如果接收方连着回了三个同样的ack,那么发送方就会立即重传。

(4)如何确定RTO(重传计时器)的时间——Jacobson算法

传输层的RTO和链路层的有区别,因为链路层通常是固定的,而传输层不是。

 Jacobson算法使用指数加权平均来算环回时间,

SRTT = α х SRTT + (1 – α) х (new sample)

Sample: AckRcvdTime – SendPacketTime, 0<α<1, usually 7/8

 这样可以让环回时间平滑,如下图所示

(5)Karn’s algorithm 

但还有一个问题,那就是重传的环回时间则么算呢

 上面两种算法分别会出现两种问题,Karn’s algorithm是说不算重传的环回时间,如果重传了那就把RTO乘2

### 计算机网络传输层学习笔记 #### 一、传输层的功能概述 传输层位于OSI七层模型中的第四层,主要负责源端到目的端的可靠通信。该层次利用网络层提供的服务为上层应用层提供两种类型的服务:面向连接的服务和无连接的服务[^2]。 #### 、复用与分用机制 在实际应用场景中,多个应用程序可以通过同一台设备上的单个物理链路发送数据流。例如,微信与QQ发送的数据最终会使用相同的传输层协议进行传输(即复用过程)。当这些数据到达接收端时,则会在传输层被解析并分配至对应的应用程序处理(即分用操作)[^1]。 #### 三、端口号的作用及其特性 为了区分来自不同应用程序的数据包,每条消息都携带有一个特定的目的端口编号以及源端口编号。值得注意的是,端口号仅具有本地含义;即使两台机器拥有相同数值的开放端口也不意味着它们之间存在关联关系——因为各自所对应的可能是完全不同的进程实例[^3]。 #### 四、TCP快速重传算法原理 假设在一个基于TCP协议建立起来的连接里出现了连续三个针对某个已发出但未确认序列号X=1的数据段重复应答情况发生时,这通常暗示着下一个按序应当到来却迟迟不见踪影的那个片段很可能已经丢失在网络之中了。此时发送者应该立即重新传送那个疑似遗失的部分而不是等待定时器超时期满再做动作,这就是所谓的“快速重传”策略的一部分实现逻辑[^4]。 #### 五、从IP地址到MAC再到端口的过程描述 当需要向某台远程主机传递信息的时候,先通过路由选择算法依据目标节点的IPv4/v6标识符来决定最佳路径直至抵达对方所在局域网内部;之后借助ARP请求获取其硬件层面的身份标签(即MAC Address),从而完成最后一公里的确切位置锁定工作;最后一步则是依靠事先协商好的端口号把载荷精准投递给指定的应用级实体加以进一步处置[^5]。 ```python def find_target_application(ip_address, mac_address, port_number): """ Simulate the process of finding a target application based on IP address, MAC address and port number. Args: ip_address (str): The destination IP address. mac_address (str): The corresponding MAC address within local network. port_number (int): Port number associated with specific service/application. Returns: str: Description of found application or error message if not successful. """ try: # Step simulation for demonstration purposes only route_to_network = f"Routing to {ip_address}'s network..." locate_host = f"Locating host via ARP request using {mac_address}..." deliver_payload = f"Delivering payload to application listening at port {port_number}." return "\n".join([route_to_network, locate_host, deliver_payload]) except Exception as e: return f"Failed to reach target application due to an unexpected issue: {e}" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值