传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测、流量控制和验证功能。
传输层协议需要提供以下功能:
- 为网络应用程序提供接口:也就是为应用程序提供访问网络的途径。设计者希望不仅能够向目的计算机传递数据,还能够向目的计算机上的特定程序传递数据。
- 多路复用/多路分解机制:多路复用表示从不同应用程序和计算机接收数据,再把数据传递到目的计算机上的接收程序。在接收端,传输层必须能够从网际层接收数据把它转发到多个程序,这种功能被称为多路分解。多路复用/多路分解的另一个作用是可以让一个应用程序同时与多台计算机保持连接。
- 错误检测、流量控制和验证。
- 传输控制协议TCP:TCP提供了完善的错误控制和流量控制,能够确保数据正确传输,它是一个面向连接的协议。
- 用户数据报协议UDP:UDP只提供了非常基本的错误检测,用于不需要TCP精细控制功能的场合,他是一个无连接的协议。
面向连接的协议和无连接的协议
- 面向连接的协议:会在通信计算机之间建立并维护一个连接,并且在通信过程中监视连接的状态。通过网络传输的每个数据包都会有一个确认,发送端计算机会记录状态信息来确保每个数据包都被正确无误地接收了,并且在需要时会重发数据。当数据传输结束之后,发送端和接收端计算机会以合适方式关闭连接。
- 无连接的协议:以单向方式向目的发送数据报,不承担通知目的计算机关于数据发送的职责。目的计算机接受到数据后也不需要向源计算机返回状态信息。
端口和套接字
端口是一个预定义的内部地址,充当从应用程序到传输层或是从传输层到应用程序之间的通路。套接字是一个由IP地址和端口号组成的地址。
【开始-运行- CMD , 输入 netstat -an 然后回车就可以查看端口】
TCP数据格式
- 源端口(16位)
- 目的端口(16位)
- 序列号(32位):当SYN标记不为1时,这是当前数据分段第一个字节的序列号;如果SYN为1,这个字段的值就是初始序列值(ISN),用于对序列号进行同步,这时第一个字节的序列号比这个字段的值大1.
- 确认号(32位):用于确认已经接收到的数据分段。其值是接收计算机锦江接收的下一个序列号,也就是下一个接收到的字节的序列号加1.
- 数据偏移(4位)
- 保留(6位):保留字段,全为0.
- 控制标记(分别占用1位):以下六个控制标记用于表示数据分段的特殊信息。
- URG:为1表示当前数据分段是紧急的,也会让“紧急指针”字段的值有意义。
- ACK:为1时确认号字段有意义。
- PSH:为1时让TCP软件把目前接收到的全部数据都通过管道传递给接收应用程序。
- RST:为1会重置连接。
- SYN:为1表示序列号将会被同步。说明是连接的开始。
- FIN:为1表示发送端计算机已经没有数据需要发送了。这个标记用于关闭连接。
- 窗口(16位):用于流量控制的参数。
- 校验和(16位):用于检验数据分段的完整性。
- 紧急指针(16位):偏移量指针,指向标记紧急信息开始的序列号。
- 选项
- 填充
- 数据
TCP的连接(三次握手)
- 计算机A发送一个数据分段,其中SYN=1,ACK=0,序列号=X.
- 计算机B接收到A的数据分段,返回一个数据分段,其中:SYN=1,ACK=1,序列号=Y,确认号=X+1。
- 计算机A接收到B的数据分段,返回一个数据分段用于确认,其中:SYN=0,ACK=1,序列号=X+1,确认号=Y+1。
在这三次握手完成后,连接被打开。
TCP流量控制
接收端计算机利用“窗口”字段来定义一个超过最后一个已确认序列号的序列号窗口,在这个范围内的序列号才允许发送端计算机进行发送。发送端计算机在没有接收到下一个确认消息之前不能发送超过这个窗口的序列号。
UDP头只包含4个16位字段:
源端口、目的端口、长度、校验和、数据。
TCP/IP学习中,以上内容摘自《TCP/IP入门经典》第六章。