您的位置:首页 > 汽车 > 时评 > 网络接口(2)

网络接口(2)

2024/11/18 8:43:15 来源:https://blog.csdn.net/2301_77841194/article/details/141473222  浏览:    关键词:网络接口(2)

一、粘包问题

原因:tcp流式套接字,数据与数据之间没有边界感,导致可能多次的数据粘到一起

解决办法:

(1)、规定间隔符,如:“ \r\n”等;

(2)、指定发送数据的长度

(3)、利用struct进行数据打包。

二、recv:用于从套接字接收数据

 ssize_t recv(int sockfd, void *buf, size_t len, int flags);

  • sockfd:是套接字描述符,指定了要接收数据的套接字。
  • buf:是一个指向缓冲区的指针,该缓冲区用于存储接收到的数据。
  • len:指定了缓冲区的长度,即可以接收的最大字节数。
  • flags:指定了接收操作的行为,大多数情况下设置为0。

三 、IP数据报的格式

(1)、版本,占4位,即ip协议的版本

(2)首部长度   占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字(1个32位字长是4字节),因此,当P的首部长度为1111时(即十进制的15),首部长度就达到最大值60字节。

 (3)区分服务,占8位

(4)(4)总长度   总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216 -1 = 65535字节。
(5)标识

(6)标志(flag)   占3位,但目前只有两位有意义。
标志字段中的最低位记为 MF (More Fragment)。MF = 1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF (Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移   占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

(8)生存时间   占8位

(9)协议           占8位

(10)首部检验和   占16位

(11)源地址         占32位
(12)目的地址     占32位
 

四、抓包工具------tcpdump 

tcp.port == 端口号 && tcp.ip == IP地址              

可视化界面:wireshark

过滤规则:

1.根据ip地址:

(1)ip.src == ip地址           (2)ip.dst ==ip地址

2.根据端口:

(1)tcp.srcport == 端口号  (2)tcp.dstport == 端口号

(3)udp.srcport == 端口号 (4)udp.dstport == 端口号

3.根据协议类型:tcp,udp,icmp……

4.任意组合以上条件抓包

如果与:and; ip.src == ip地址  and  tcp.dstport == ip地址

如果或:or ;  ip.src == ip地址  or  tcp.dst == ip地址

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com