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找到某个进程。