赞
踩
目录
传输层协议主要有两个,分别是UDP协议和TCP协议。
端口号(Port)标识了一个主机上进行通信的不同的进程。在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信。
netstat:
netstat是一个用来查看网络状态的重要工具。
语法:netstat [选项]
功能:查看网络状态
常用选项:
- n 拒绝显示别名,能显示数字的全部转化成数字
- l 仅列出有在 Listen (监听) 的服務状态
- p 显示建立相关链接的程序名
- t (tcp)仅显示tcp相关选项
- u (udp)仅显示udp相关选项
- a (all)显示所有选项,默认不显示LISTEN相关
pidof:
在查看服务器的进程id时非常方便。
语法:pidof [进程名]
功能:通过进程名, 查看进程id
我们注意到, UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大是64K(包含UDP首部)。然而64K在当今的互联网环境下, 是一个非常小的数字。如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。
UDP的socket既能读, 也能写, 这个概念叫做全双工。全双工的意思是recvfrom和sendto可以同时被调用。
各部分用途:
其余部分后面详细介绍。
TCP是可靠的,所以发送下一个数据前必须确认对方已经收到之前的数据。所以每次再发送数据后,都需要对方主机进行应答,来表明已经收到数据。
主机A发送数据给B之后, 可能因为网络拥堵等原因, 数据无法到达主机B。如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发。当然传回来的应答也可能丢掉,这个情况下即便B已经收到数据但A不知道,依旧会重发数据,要百分之百确保B收到了上一条数据。重复的数据OS会根据32位序号进行去重操作。
32位序号和32位确认序号:
tcp是面向字节流的,TCP将每个字节的数据都进行了编号,即为序列号。我们可以理解成有一个数组以字节为单位线性的存储了缓冲区的数据,每个字节对应一个下标。每个报文在发送时会携带一串数据,这个报文的序号为这一串数据对应的最大下标。发送下一串数据时就能通过下标锁定起始位置。
TCP协议是自带发送和接收缓冲区的。用户层在进行write/send操作时,并不是把数据发到网络中,而是拷贝到TCP协议的缓冲区中。用户层接收数据时同理,也是直接从TCP协议的缓冲区
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。