基础知识
我们是把物理传输层看成第一层,电气信号通讯。
以太网链路层看成第二层,mac地址通信。
ARP/RARP 是mac地址/ip地址的转换协议,所以我们准确的称其为2.5层。
IP属于三层,ip地址通信。
Tcp/udp属于四层,端对端。
1.接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调用recv
recv函数仅仅是copy数据,真正的接收数据是协议来完成的),recv函数返回其实际copy的字节数
2.阻塞模式下send并不是说直到你发送数据到对方机器才返回的意思,它是说把你要发送的数据放入发送缓冲后,就直接返回。如果是非阻塞send,如发送缓冲区没有了,他就直接返回,而阻塞时会等待发送缓冲区有空间,再返回。
IP分片
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU
TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数
由于缓冲区大小在TCP头部只有16位来表示,所以它的最大值是65536,但是对于一些情况来说需要使用更大的滑动窗口,这时候就要使用扩展的滑动窗口,如光纤高速通信网络,或者是卫星长连接网络,需要窗口尽可能的大。这时会使用扩展的32位的滑动窗口大小。
网络性能指标
平均传输率,峰谷传输率,峰值传输率,延时
TCP中的帧同步
TCP不提供帧同步,这使得它对于面向字节流的协议是完美的。这是 TCP与 UDP(User Datagram Protocol,用户数据报协议)的一个重要区别。UDP是面向消息的协议,它保留发送者和接收者之间的消息边界。TCP是一个面向流的协议,它假定正在通信的数据是无结构的,如图 1所示。
图 1的上部说明一个 UDP客户端和服务器。左边的对等层完成两个套接字的写操作,每个 100字节。协议栈的 UDP层追踪写的数量,并确保当右边的接收者通过套接字获取数据时,它以同样数量的字节到达。换句话说,为读者保留了写者提供的消息边界。
现在,看图 1的底部.它为 TCP层演示了相同粒度的写操作。两个独立的写操作(每个 100字节)写入流套接字。但在本例中,流套接字的读者得到的是 200字节。协议栈的 TCP层聚合了两次写操作。这种聚合可以发生在 TCP/IP协议栈的发送者或接收者中任何一方。重要的是,要注意到聚合也许不会发生 —— TCP只保证数据的有序发送。
对大多数开发人员来说,该陷阱会引起困惑。您想要获得 TCP的可靠性和 UDP的帧同步。除非改用其他的传输协议,比如流传输控制协议(STCP),否则就要求应用层开发人员来实现缓冲和分段功能。
Network
最新推荐文章于 2016-01-27 09:02:37 发布