linux学习——网络编程

文章目录:

1.网络基础

(1)宏观概括

    linux学习——网络编程

    电脑主机通过网络适配器连接到网络,网络适配器+网络可抽象为与磁盘控制器+磁盘类似的i/o设备。网络传来的数据通过适配器,i/o总线等复制到内存,等待cpu的处理,同样可以将主机的数据发送到网络中。

     linux学习——网络编程linux学习——网络编程

 

 

 

    实际工作中采用4层网络模型,自顶向下依次为网络接口层(对应OSI模型的物理层+链路层,适配器和物理链路),网际层(IP层),传输层(TCP/UDP),应用层。

    客户端主机给服务器主机发送一次信息的整个过程:

      1)客户端主机运行程序,遇到套接字接口陷入内核(套接字原理及接口见下文)。

      2)内核运行协议软件,将信息封装,加上IP分组头部和MAC帧头部(网络通信中只可见网络模型的下三层)。

      3)将封好的数据包从内存复制到网络适配器中,再通过网络适配器转发到网络中。

      4)路由器根据IP分组头部的ip地址,进行路由选择和分组转发,转发到对应网络中。 交换机/网桥根据帧首部mac地址,在同一局域网内进行数据转发。

      5)网络适配器接收到网络上发来的数据,产生硬件中断,根据中断号执行相应的操作即运行协议软件对数据进行解包,根据端口号将数据发送到相应的进程。

 

   

(2)协议

    1).ARP协议  

    用途:已知IP地址获取mac地址,用于之后携带信息的报文在局域网内进行转发。

    工作原理:

        网络适配器欲将信息发送到网络中:

        ①先检查ARP高速缓存中是否有ip所对应的mac地址信息,若无在局域网内广播arp请求报文。 

        ②路由器接收该帧,若发现发送IP地址与目标IP地址在一个网络内则丢弃,否则将自己的mac地址放入ARP回答报文中回传给请求者。

        ③局域网内其他主机适配器收到帧,验证目标IP地址,若为发送给自己的帧则收下,发送ARP回答报文,否则丢弃。

    报文格式:

        linux学习——网络编程

 

        ARP请求报文:以太网目标地址为FF-FF-FF-FF-FF-FF(用于广播),目标硬件地址为00-00-00-00-00-00,其他项依次正常填入。

        ARP回答报文:根据请求报文中的地址信息,以单播的方式将硬件地址信息传给请求者。

     wireshark协议分析:

      linux学习——网络编程

 

     2)IP协议

     用途:用于异构网络互联。

     报文格式:

    linux学习——网络编程

     wireshark协议分析:

    ipv4

    linux学习——网络编程

    1.协议类型:ipv4——4

    2.首部长度:以4字节为单位。

    3.服务类型

    4.IP报文总长度:以1字节单位。

    5.标识:用于分片拼装

    6.标志(前三位):第一位为 0,未使用。 

             第二位DF:1为不许分片,0为允许分片

              第三位MF:DF为0时才有意义,MF=1时表示该序号之后还有分片,MF=0表示此片为最后一个分片。

      片偏移(后十三位):表示分片序号,以8字节为单位。

    7.生存时间:每通过一个路由器减一,减为零则丢弃。

    8.ip报文所承载报文类型:tcp——6 udp——17 icmp——

    9.头部校验和:只校验首部。

    10.源IP地址

    11.目的ip地址

 

 

    ipv6

     linux学习——网络编程

 

  3)TCP协议

    用途:实现复用分用,流量控制,确认,拥塞控制等。

    工作原理:

    1.tcp三次握手建立连接:

      linux学习——网络编程

      为什么必须是三次握手:

       如果是两次握手,考虑这样一种情况:主机1向主机2第一次发建立连接请求,由于链路较差,主机1未在定时器时间内未收到确认再次发起新的建立连接请求,主机2收到了新的请求,并回复确认成功建立了链接1。此时第一次也到达了主机2,主机2也会发送确认信号,又建立了一条连接2。主机1会通过连接1发送数据,发送后断开该链接,而连接2会一直存在,造成资源的浪费。

    2.tcp四次挥手断开连接:

    linux学习——网络编程

    报文格式

      linux学习——网络编程

 

    wireshark协议解析:

     linux学习——网络编程

 

     与arp,ip类似与报文格式一一对应即可。

    ①端口号用于复用和分用

      常用端口号为0~1023

应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP  
熟知端口号 21 23 25 53 69 80 161  

    ② 序列号与确认号用于确认机制,确认机制和超时重传,保证可靠传输。

    ③ 窗口大小用于流量控制。

 4)UDP协议

    用途:实现分用复用,数据差错校验(不可靠传输,延时小)。

    报文格式:

    linux学习——网络编程

    wireshark协议分析:

    linux学习——网络编程

2.编程接口

 

linux学习——网络编程

上一篇:LeetCode_Triangle


下一篇:linux(centos7)修改服务器时间