TCP/IP笔记

TCP/IP 网络模型

应用层 Application Layer

应用层,电脑、手机应用的实现,不同设备之间的通信。应用层不需要关心数据如何传输,主要提供应用功能HTTP、FIP、Telnet、DNS、SMTP等

传输层 Transport Layer

为应用层提供网络支撑TCP、UDP。

TCP (Transmission Control Protocol) ,大部分应用使用的正式TCP传输层协议,比如HTTP应用层协议。TCP相比UDP多了很多特性,比如流量控制、超时重传、拥塞控制等,着写都是为了保证数据包能可靠地传输给对方。

UDP 相对来说就很简单,只负责发送数据包,不保证数据包是否能抵达对方,但它时性相对更好,传输效率也高。当然UDP也可以实现可靠传输,把TCP的特性在应用层上实现就可以,不过要实现一个商用可靠UDP传输协议,也不是一件简单的事情.

应用需要传输的数据包超过了MSS(TCP 最大报文段长度),就要将数据包分块,这样即使中途有一个分块丢失或损坏,只需要重新发送这一个分块,而不用重新发送整个数据包。TCP吧每一个分块称为一个TCP段(TCP Segment)

网络层 Internet Layer

网络层负责将数据从一个设备传输到另一个设备。

网络层最使用的是IP协议(Internet Protocol) ,IP协议会将传输层的报文作为数据部分,再加上IP包投组装成IP报文,如果IP报文超过MTU(以太网中一般为1500字节)就在此进行分片,得到一个即将发送到网络的IP报文。

16594933062635

IP地址对设备进行编号,对于IPv4协议,IP地址共32位,分成四段(192.168.100.1)

IP地址分成两种意义

  • 一个是网络号,负责表示该IP地址是属于那个 【子网】的
  • 一个是主机号,负责表示同一个【子网】下的不同主机

这里需要配合子网掩码才能算出IP地址的网络号和主机号。

例如: 10.100.122.0/24 /24 代表 255.255.255.0 子网掩码 二进制就是 [11111111-11111111-11111111-0000000]24个1简化为/24

16594938118652

网络接口层 Link Layer

在IP头部的前面加上MAC头部,封装成数据帧 Data frame 发送到网络。

IP头部中的接收方IP地址表示网络包的目的地,通过这个地址我们就可以判断要将包发送到哪里。

电脑上的以太网,Wi-Fi 接口,以太网交换机、路由器上的千兆,万兆以太网口,还有网线,他们都是以太网的组成部分。以太网就是一种【局域网】,吧附近的设备链接起来,使他们进行通信的技术。

以太网在判断网络包目的地时,和IP方式不同,相同匹配的方式才能在以太网中将包发网目的地,而MAC头部就是干这个用的,所以,在以太网进行通讯要用到MAC地址。

MAC头部时以太网使用的头部,它包含了接收方和发送方的MAC地址信息,我们可以通过ARP协议获取对方的MAC地址。

所以说,网络接口层主要为网络层提供【链路级别】传输服务,负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来表示网络上的设备。

16595832398460

网络中传输的过程

HTTP

URL = IP + uri

通讯协议 + // + ip地址 + / + 统一资源定位符

http://lfweiweixiao.cn/blogs/

当没有具体的请求资源时,会访问目录下的 index.html 或 default.html

DNS 真实地址查询

DNS 服务器保存了 域名 与ip 的对应关系

http://lfweiweixiao.cn/blogs/

http://119.91.60.82/blogs/

DNS 中的域名都是用句点 .来分隔,层次越考右,层级越高

16595857329256

DNS解析流程

  1. 客户端发送 DNS请求,问www.lfweixiao.cn的ip是什么,并发给本地DNS服务
  2. 本地域名服务器收到客户端请求后,先在缓存中查询,未命中。本地DNS访问根域名,查询www.lfweixao.cn的ip地址,根服务器不会解析域名,但能指明访问DNS地址。
  3. 根DNS收到来自本地的DNS请求后,返回对应的 com、cn、net 的下级NDS地址。
  4. 访问到cn ( 管理这个域名的DNS 也叫权威DNS ),权威DNS服务器查询后返回对应IP 给本地DNS。
  5. 本地DNS 在将IP地址返回给客户端,客户端和目标建立连接。

协议栈

通过DNS获取到IP后,就可以吧HTTP到传输工作交给操作系统中的协议栈。

应用程序,通过调用Socket库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的TCP和UDP协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈道下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由IP负责。

IP中还包括 ICMP协议和ARP协议。

  • ICMP用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP用于根据IP地址查询相应的以太网MAC地址

TCP

TCP包头格式

16596650238147

源端口号、目标端口号: 数据从哪里到哪里到。

序号: 解决包乱序问题。

确认号: 解决丢包问题。没有收到确认就重发。

状态位:(URG、ACK、PSH、RST、SYN、FIN)TCP是面向链接,双方要维护链接状态,这些状态位的包发送,会引起双发状态改变。

  • SYN: 是发起一个链接
  • ACK:是回复
  • RST: 重新链接
  • FIN: 结束链接等

窗口大小:TCP流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力。

16596658565322

Linux 通过netstat -napt查看链接状态。

ip

TCP模块执行链接、收发、断开等个阶段操作时,都需要委托IP模块将数据封装成 网络包 发送给通信对象。

16596670201288

目标地址: 通过DNS域名解析得到Web服务器IP

HTTP经过TCP传输,在IP包头的协议号,要填写位06(十六进制),标识为TCP链接。

当多个网卡时,在填写地址IP时,就需要判断到底应该填写那个地址。这个判断相当于在多模块网卡中判断应该使用哪一个块网卡来发送包。

这个时候就需要根据路由表 规则,来判断哪一个网卡为源地址IP。 Linux 命令route -n

MAC

生成IP头部之后,接下来网络包还需要在IP头前面加上MAC头部

MAC头部时以太网使用的头部,它包含了接受方和发送方的MAC地址信息。

接收方MAC地址 48位
发送方MAC地址 48位
协议类型 16位

一般在TCP/IP 通信里,MAC包头的协议类型 只使用 0080IP协议,0806ARP协议。

MAC发送方和接收方确认

发送方 的MAC地址获取比较简单,MAC地址是在网卡生产时写入到ROM里的,只要 将这个值读取出来写入到MAC头部就可以了。

接收方 MAC地址就有点复杂了,只要告诉以太网对方的MAC地址,以太网就会帮我们吧包发送过去,这里填写对方的MAC地址

清楚应该把包发送给谁,查询路由表,在路由表中找到匹配的条目,然后把包发送给Gateway列中的IP地址就可以了。、

获取接收方的 MAC地址 通过ARP 协议找到路由器爹MAC地址,ARP会在以太网中以广播的形式,查询这个IP地址,获取MAC地址。以后会把本次查询结果方到一块叫做ARP缓存的内存空间留着以后用,不过缓存的时间是几分钟。

Linux 系统中,我们可以使用 arp -a 查询ARP 缓存内容

网卡

网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输。

负责这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。

网卡驱动获取网络包之后,会将其复制到网卡到缓存区中,接着会在其开头加上包头和起始帧分界符,在末尾加上用于检查错误的帧校验序列。

16596822831058

交换机

交换机设计是将网络包原样转发到目的地。交换机工作在MAC层,也称为二层网络设备。

电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。然后通过末尾的FCS校验错误,如果没有问题则放到缓冲区。这部分操作基本和计算机网卡相同,但交换机的工作方式和网卡不同。

网卡自身具有MAC地址,并通过核对接受的包的接收方MAC地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对的,交换机的端口不核对对方的MAC地址,而是直接接收所有的包并存放到缓冲区。因此,和网卡不同,交换的端口不具有MAC地址。

将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经存在MAC地址表中的记录。

交换机MAC地址表主要包含两个信息

MAC地址表端口控制信息
00-00-c0-16-AE-FD1。。。
00-02-B3-1C-9C-F92.。。。
根据接收放的MAC地址,通交换电路把包发送到相应的端口。

路由器

网络包经过交换机后,现在达到了路由器,并在此被转发到下一个路由器或目标设备。

路由器是基于IP设计的,俗称三层网络设备,路由器的各个端口都具有MAC地址和IP地址;

而交换机是基于以太网设计的,俗称二层网络设备,交换的端口不具有MAC地址。

路由器的包接收操作,电信号到达网络接口部分,路由器中的模块后将电信号转成数字信号,然后通过包末尾的FCS进行错误校验。如果没问题则丢弃这个包。总的来说,路由器端口都具有MAC地址,只接收自身地址匹配的包,遇到不匹配的包则直接丢弃。

完成包接收操作之后,路由器就会去掉包开头的MAC头部。
MAC头部的作用就是将包送达路由器,其中的接收方MAC地址就是路由器的端口的MAC地址。因此,当包到达路由器之后,MAC头部的任务就完成,于是MAC头部就会被丢弃。

路由器需要根据网关列表判断对方的地址。

  • 如果网关是一个IP地址还未抵达终点,还需继续要路由器转发。
  • 网关为空则IP头部的接收放IP地址就是要转发的目标地址,说明已抵达终点。

知道对方的IP地址之后,接下来需要通过ARP协议根据IP地址查询MAC地址,并将查询结果为接收方MAC地址。

在网络包传输过程中,源IP地址和目标IP地址始终是不会变的,一直变化的是MAC地址需要通过MAC地址在以太网内进行两个设备之间的包传输。

底部

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值