网络接口(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地址

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值