计算机网络程序员Java学习笔记

计算机网络之运输层

2017-12-13  本文已影响114人  紫霞等了至尊宝五百年

1 功能

1.1 进程间通信

1.2 应用进程间通信

1.3 运输层的主要功能

1.4 两种不同的运输协议

2 UDP与TCP异同

2.1 TCP 与 UDP

3.1 运输层的端口

3.2 需要解决的问题

软件端口与硬件端口

3.3 TCP 的端口

3.4 三类端口

4.1 TCP 最主要的特点

4.2 TCP 的连接

套接字 (socket)

同一个名词 socket有多种不同的意思

TCP建立连接的三次握手

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据.
一个完整的三次握手也就是 请求---应答---再次确认

四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭
这个原则是
当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接
收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

(1)客户端A发送一个FIN,用来关闭Client A ---->>>Server B的数据传送
(2)B收FIN,发ACK,确认序号为收到的序号加1
(3)B关闭与A的连接,发FIN给A
(4)A发ACK报文确认,并将确认序号设置为收到序号加1


四次分手

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢

这是因为服务端的listen状态下的socket当收到syn报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
但关连接时,当收到对方的FIN报文时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必马上关闭socket,即你可能还需发送一些数据后,再发FIN来表示你可以关连接了,所以这里的ACK报文和FIN报文多数情况下都是分开发送的

简单点说

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

完成三次握手,客户端与服务器开始传送数据

再简单点说

A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了!

可靠传输的工作原理

停止等待协议

1 注意

可靠传输的实现

TCP通过下列方式提供可靠性

使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信

这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)

ARQ表明重传的请求是自动进行的:接收方不需要请求发送方重传某个出错的分组

TCP 可靠通信的具体实现

TCP 连接的每一端都必须设有两个窗口

TCP 的可靠传输机制用字节的序号进行控制:所有的确认都是基于序号而不是基于报文段

TCP 两端的四个窗口经常处于动态变化中

TCP 连接的往返时间 RTT 也不是固定不变的:需要使用特定的算法估算较为合理的重传时间

TCP 报文段的首部格式

TCP 报文段结构

TCP 的流量控制

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

一般我们总希望数据传输得更快一些.但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失

流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞
利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制

2 考虑传输效率

可以用不同的机制来控制 TCP 报文段的发送时机

TCP的拥塞控制

1 原理

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)

拥塞控制与流量控制的关系

1.3 拥塞控制的一般原理

拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问题

当前网络正朝着高速化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因。

在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因。这点应特别引起重视

1.4 开环控制和闭环控制

2 几种拥塞控制方法

2.1 慢开始和拥塞避免

2.1.1 慢开始算法的原理

2.1.2 传输轮次(transmission round)

2.1.3 设置慢开始门限状态变量ssthresh

2.1.4 当网络出现拥塞时

2.1.5 乘法减小�(multiplicative decrease)

2.1.6 加法增大�(additive increase)

执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞

上一篇下一篇

猜你喜欢

热点阅读