loop: //本地回环测试
tcp在传输时,有可能就会将两次发送的内容粘到一起,这是由于tcp的第三个特点:字节流式传输。它不一定会将两次发送出来的数据进行严格区分。这种现象在tcp链接中叫粘包。
但是socket在底层发送东西的时候是会在一段时间中等待的,若短时间内未收到接下来的信息,也就会直接发出去
粘包问题:
原因:
tcp流式套接字
数据与数据 之间没有边界
导致: 可能多次的数据粘到一起
解决:
1.规定一些数据与数据之间的 间隔符
eg: "\aa" "\r\n"
2.可以指定要发送的数据的长度
3.自己将数据打包
struct msg
{
int size;
char data[100];
}
recv 相当于read 读取数据
send 相当于write 写数据
recv和send与read write相比较唯一不同的是多了一个flag,表示recv和send 专用于网络
常用网络测试工具:
Ubuntu安装Telnet
netstat:
Telnet 应用层协议(基于tcp的应用层协议)
传输层 tcp
网络层 ip
数据链路层
物理层
应用层 data
使用wireshark的过滤规则:
使用wireshakr抓包观察到的tcp连接以及断开现象:
tcp三次握手:
tcp四次挥手: