socket基础,用php进行分析。
tcp/ip协议族
- 应用层
- http/dns/telnet/ping/websocket/mqtt 等
- 传输层tcp/udp
- 网络层IP/ICMP
- 主要就是数据的选路和转发
- 数据连路程arp/rarp
- 主要完成ip地址和物理地址转换
数据链路层
数据链路层接受到上层进来到数据,首先先拿到ip,再使用arp程序发起一个请示,它会把ip,包括自己到ip,自己的物理地址mac进行封装后送出去
网络上的主机接收到arp请示时,会判断ip是不是自己,然后进行响应,把自己到ip,mac发送给对方
然后再把数据,mac地址进行封装为数据帧frame
目的物理地址,源物理地址,数据
网络层
接收数据时:
它会进行判断,数据是不是发给自己的,如果是发给自己的,它会传送到传输层
最终传递到应用层某个进程 【进程具有数据读写能力】
如果不是发给自己时,它会你想转发 ,ip_forward[lvs]
发送数据时:它会进行封装为ip数据报
传输层
tcp/udp
tcp:基于流stream的服务 字节流特点:要进行连接才能通信,全双工,有序的,可靠的,
超时重传。 应用程序在收发数据时需要自己去判断数据的边界。因为它跟水一样没有边界【会涉及到数据粘包和少包】
udp:数据报服务,传输数据是固定的,但是不可靠,发送方发送一次,接收方必须及时接收,否则数据丢弃recvfrom
应用层
应用层在实现的时候是调用下层提供的接口 【操作系统提供的系统调用函数,socket-api】
分析工具
tcpdump
1tcpdump -X -AAA -i ens33 port 1234
2# -X 报文每个字节展示
服务端调用listen处于listen状态
客户端调用connect函数发送syn同步syn_sent
服务器收到ack确认报文,双方就处于ESTABLISH状态
close 可以是客户端主动关闭,也可以是服务端主动关闭.
strace
strace 是一个可用于诊断、调试和教学的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
https://blog.csdn.net/itworld123/article/details/122961879
1strace -f -s 6550 php server.php
2
3strike -f -s 6550 ./main
https://man7.org/linux/man-pages/dir_all_by_section.html
1socket(AF_INET, SOCK_STREAM,IPPROTO_IP) = 3 (监听socket)
2
3bind(3);
4listen(3,5);
5accept(3,)
寻址
ip找到某台机器,port找到某个进程。