9 Linux 网络编程中的部分基础概念


前言 (含目录)


网络应用程序设计模式

  • C/S (client/server)
优点1.协议选用灵活
2.可以缓存数据
缺点1.对用户安全构成威胁
2.开发工作量大,调试困难
* B/S (brower/server)
优点跨平台
缺点只能使用http

OSI模型 和 TCP/IP模型

OSI模型TCP/IP模型
物理层网络接口层模型的基层,负责数据帧的发送与接收(帧是独立的网络信息传输单元)。网络接口层将帧格式的数据放到网络上,或从网络上把帧取下来。
数据链路层
网络层网络层
  • 网络层将数据包封装成IP数据包,并运行必要的路由算法,有效的找到达到目的主机最优的路径树。这里有四种互联协议:
  • 网际协议IP:负责在主机和网络之间路径寻址和路由数据包。
  • 地址解析协议ARP:获得同一物理网络中的主机硬件地址
  • 网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误
  • 互联组管理协议IGMP:用来实现本地多路组播路由器报告
传输层传输层
  • 传输协议在主机之间提供通信会话。传输协议的选择根据数据传输方式而定.
  • 传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况,并适用于要求得到响应的应用程序。
  • 用户数据报协议UDP:提供了无连接通信,且不对传送包进行可靠性确认。适合于一次传送小量数据(一般小于520字节),可靠性则由应用层来完成。
会话层应用层 应用程序通过这一层访问网络.
  • FTP:提供应用级的文件传输服务
  • SMTP:电子邮件协议
  • HTTP:超文本传输协议,web服务器所采用的协议
  • DNS:域名解析服务,将域名映像成IP地址的协议
表示层
应用层

以太网帧协议

MAC: Media Access Control Address (以太网地址/物理地址), 每个网卡有唯一的MAC.

以太网帧格式 (借助MAC完成数据报传输)
目的地址源地址类型数据CRC
66246~15004
类型
0800
IP数据报
246~1500
类型
0806
ARP请求/应答PAD
22818
类型
8035
RARP请求/应答PAD
22818
ARP数据报 (根据IP获取MAC)
以太网首部28字节ARP请求/应答
以太网的目的地址以太网的源地址帧类型硬件类型协议类型硬件地址长度协议地址长度op发送端以太网地址发送端IP地址目的以太网地址目的IP地址
662221126464

IP协议

4位版本
(IPv4 / IPv6)
4位首部长度8位服务类型
(TOS)
16位总长度
(字节数)
26字节
16位标识3位标志13位偏移
8位生存时间
(TTL)
(最多可以跳转多少次)
8位协议16位首部检验和
32位源IP地址
32位目的IP地址
选项
(如果有)
数据

UDP协议

无连接的传输协议

  • 连接的时候不会握手
  • 数据发送出去之后就不管了

使用场景: 效率高,实时传输

0~1516~31
16位源端口号16位目的端口号8字节
16位UDP长度16位UDP检验和
数据
(如果有)




TCP协议

面向连接的、可靠的、基于字节流的传输层通信协议

使用场景: 数据安全性或完整性要求高的时候

标志位:

  • URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据。
  • ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略)。
  • PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
  • RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
  • SYN 置1时用来发起一个连接。
  • FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。

TCP建立连接三次握手:

注: 建立连接和断开连接时如果携带了数据,则确认序号同样还需再加上数据的大小

  • 第一次:

客户端:

发送 SYN
随机产生32位序号

服务器:

检测 SYN 值是否为 1

  • 第二次:

服务器:

发送 ACK + 确认序号(客户端的随机序号+1)
发起连接请求 (SYN + 32位随机序号)

客户端:

检测标志位是否为 1
检验确认序号是否正确

  • 第三次:

客户端

发送确认数据包 (ACK + 确认序号(服务器的随机序号+1))

服务器:

检测 ACK 是否为 1
校验确认序号是否正确

数据传输:

  • 每次发送数据都会带有 ACK 标志位
  • 当一方收到数据后,会回复一个确认序号(在对方最后发送的一个确认序号上+发送的数据大小). 如果发送方校验到确认序号不对,则会重新发送数据.

断开连接四次挥手(下面假定服务器发起断开请求,如果是客户端则相反):

  • 第一次:

客户端:

发送断开请求: FIN + 序号 和 ACK + 序号

服务器:

检测 FIN 值是否为1
校验 ACK 确认序号, 确认上一次数据发送是否完整收到

  • 第二次

服务器:

给客户端发送 ACK + 确认序号 (上一次FIN 序号 + 1)

客户端:

校验 ACK 和 确认序号

  • 第三次

服务器:

发送断开连接的请求: FIN + 序号 和 ACK + 序号

客户端

校验…

  • 第四次:

客户端:

发送 ACK + 序号

服务器:

校验…

0~1516~31
16位源端口号16位目的端口号
32位序号
32位确认序号
4位首部长度保留 (6位) 16位窗口大小
16位校验和16位紧急指针
选项
数据




数据的发送和接收简述
在这里插入图片描述

用户数据
应用层头部用户数据
TCP头部用户数据\TCP
IP头部TCP头部用户数据\IP
以太网头部IP头部TCP头部应用数据以太网尾部\以太网帧

向下走发送,往上走接收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值