深入理解网络TCP通信

网络相关的Linux命令

#1.进入到当前Shell程序的进程
cd /proc/$$/
#2.一切皆为文件,获取该进程的文件描述符
cd fd
#3.将7文件描述符重定向到 /dev/tcp/www.baidu.com/80,这个命令实际上就是当前进程和百度的服务器进程简历了Socket连接
exec 7<> /dev/tcp/www.baidu.com/80
#4.先百度通过http协议发送请求
# "GET / HTTP/1.0\n"
# exec -e "GET / HTTP/1.0\n" -e 翻译转义字符
#5.IO重定向,把标准输出1重定向到刚才新建的百度socket的文件描述符7,百度在收到这个http请求之后,会将响应内容返回到7文件描述符号,此时读取7文件描述文件符中的数据即可
echo -e "GET / HTTP/1.0\n" 1>& 7
#6.cat读取的标准输入中的数据,此时可以将7描述符重定向到标准输入0 
cat 0<& 7
#7.关闭文件描述符7
exec 7>& -

通过上面6条指令,我们可以不借助浏览器就能向百度请求到首页。

传输控制层

传输控制层只负责双方的通信,通过“确认机制”来实现逻辑上的可靠连接,并不是真正的连接,双方都需要确认对方收到了数据。主要有TCPUDP
三次握手
建立socket连接,双方每次接受到对方的包时,都会向对方发送一个确认包ACK用于告诉对方已成功接受到包。
(1)Client向Server发送一个同步序列号seq1;
(2)Server收到之后发送一个ACK=seq1+1响应信号,并同时发送一个自己的同步序列号seq2给客户端,但是Server并不知道对方能否正确接受;
(3)Client收到之后,需要向Server发送一个ACK=seq2+1信号。这三个步骤必须都完成了 ,一个可靠的连接才建立。

请添加图片描述

四次分手
(1)Client发送FIN分手信号给Server
(2)Server只要收到了数据包,就回一个ACK;此时Server可能并不能马上断开连接,他可能还有数据为发送完毕,当他发送完毕之后,向Client发送一个FIN信号。
(3)Client接收到对方发来的FIN信号,会反馈一个ACK信号。此时双发才可以释放连接(主要是客户端释放主机的端口资源)
请添加图片描述

网络层

传输控制层只负责保证可靠的连接,但是具体的数据传输到哪台机器,需要交给网络层来处理,网络层负责两件事:

  • 路由判定(路由表)。判定目标地址是在当前局域网还其他网络里面。这就要依赖于IP协议。一个IP地址包含了两部分信息:网络号+主机号
  • 将数据转交给下一跳。下一跳可能是该局域网内的交换机也有可能是该网络的网关设备,取决于目标IP地址是否在当前网络内。

具体做法:在路由表中,将目标IP地址于路由表中的每个条目的子网掩码做与运算,算出来的目标则可以判定是在网关还是当前局域网的交换机。
route指令
请添加图片描述

数据链路层

网络层通过路由表可以知道将数据包交给下一个节点,但是具体怎么做?光靠网络层是解决不了的,我们来假设这么一个场景:我们要发送一个数据包给百度服务器,我们通过网络层的路由表已经知道需要将该数据包交给当前网络的网关,然而这个数据包的目标地址是填百度服务器的IP地址还是网关的IP地址呢?如果填网关的IP地址,我们虽然能找到该网关,但是转交给网关之后,网关又怎么来确定他的下一个节点呢?那如果填目标的IP地址,我们根本无法找到网关,也就不可能抵达百度服务器了。这个时候就需要数据链路层了。也就说,我们即需要目标的IP地址,同时需要知道网关的IP地址,此时数据链路层的ARP协议能根据IP找到MAC地址,而MAC地址也是独一无二的

  • MAC地址。网络节点的物理地址,全球独一无二。
  • ARP协议。实际上也是一张表,IP:MAC表,该设备的MAC地址映射了一个IP地址。因为外面要封装一个MAC地址,如果没有MAC地址,需要ARP请求获取到该网关IP对应的MAC。
    其工作原理就是:由于我们在网络层已经知道了数据包需要发给网关,这个网关的IP地址已经知道,此时,查询arp表,就能根据这个网关IP地址找到相应的MAC地址,在数据包的再套一层mac地址。
    请添加图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值