通信协议TCP/IP协议

通信协议TCP/IP协议

TCP/IP协议是一个协议集合。TCP/IP协议族中有一个重要的概念是分层,TCP/IP协议按照层次分为以下四层。应用层、传输层、网络层、网络链路层。一个层只负责一个层次的问题,如果出问题了,和其他的层次无关,只要维护这个层次也就好了。其实编程语言里也能体现这个分层理论,即封转性、隔离。

网络链接层:用来处理链接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC,网络适配器),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链接层的作用范围之内。

网络层:用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层固定了通过怎样的路径(所谓的传输路线),到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用是在众多的选项中选择一条传输路线。

传输层:TCP 传输控制协议,UDP用户数据报协议,传输层主要包括的就是这两个协议。

应用层:FTP 文件传输协议 DNS域名系统 HTTP协议 应用层上主要包括的就是这些协议。

1.HTTP关系密切的协议:IP、TCP和DNS

IP协议:这里IP协议指的不是我们通常所说的192.168.1.1,这里的IP指的是一种协议,而后面数字值指的是IP地址,IP协议的作用在把各种数据包准确无误的传递给对方,其中重要的条件啊是IP地址,和MAC地址。其中IP地址相当于我们所住的小区,而MAC相当于你的门牌号,MAC地址是全球唯一的,除去认为因素外是不可能重复的。

TCP协议:如果说IP协议是找到对方的详细地址。那么TCP就是安全的把东西带给对方。各有分工互不冲突。TCP属于传输层,提供可靠的字节流服务。整个过程就是在拆解、运输、拼装的过程其实就是TCP字节流的过程。打个比方,比如你是卖床的人,你给别人送过去太过于庞大,所以你就把床拆成一部分,在每个部分贴上这个收货人的名字,最后安全送到这个人手里然后再拼装起来。
而为了信息确保安全无误的到达,TCP采用了著名的三次握手策略,这里为了详细的理解,我们再次打个比方。例如我们在淘宝上买东西,我们向卖家支付金额,这个过程等于我们在第一次握手,我们向链接端发送SYN的报文,等待另一端的验证。卖家收到金额,给我们生成物流订单,而这个订单号是我们可收到的,这就是我们的第二次握手,证明收到SYN的报文,而又生成一个ACK的报文给我们,而这个ACK报文就是我们的物流订单号,我们收到订单后等于和卖家产生了链接,我们的链接就是这个ACK也就是这个物流订单号。

四次挥手断开连接:现在的网络通信都是基于socket实现的,
a:当客户端将自己的socket进行关闭时,内核协议栈会想服务器发送一个FIN置位的包,请求断开连接。

b:服务端收到客户端的FIN断开请求后,内核协议栈会立即发送一个ACK包作为应答,表示收到客户单的请求。

c:服务器运行一段时间,关闭了自己的socket。这个时候内核协议栈会向客户端发送一个FIN包,请求断开连接。

d:客户端收到服务端发来的FIN断开请求后,会发送一个ACK做出应答,表示收到服务端的请求。

DNS:和HTTP协议咿呀昂是出于应用层的服务,提供域名到IP地址之间的计息服务。互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意思的字词。所以DNS服务就为了解决这个问题而产生了。其实很好理解,形同我们电脑中的HOST文件 假设百度网页ip地址是192.168.1.1 而我们将这个ip地址指向www.baidu.com当我们访问这个地址的时候,电脑便不会去外网服务器查询了,而是直接去访问192.168.1.1.这就是一个简单的域名劫持,足以说明的DNS协议了。

UDP协议:UDP协议也是传输层协议,它是无连接的,不保证可靠的传输协议。

下来在讲明下为什么TCP是可靠的,而UDP是不可靠的。
1.tcp可靠数据传输原理
每个tcp socket在内核中都有一个发送缓冲区和一个接受缓冲区。tcp协议要求对端在接受到tcp数据报之后要对其序列号进行ack,只有当接受到一个tcp数据包ack之后才可以把这个tcp数据包从socket的发送缓冲区清除,另外tcp还有一个流量控制功能,tcp的socket接受缓冲区接受到网络上来的数据缓存起来,如果应用程序一直没有读取,socket接受缓冲区满了之后,发送的动作是:通知对端tcp协议中的窗口关闭,这边是滑动窗口的实现,保证知窗口大小的数据,这就是tcp的流量控制,如果对方无视窗口大小而发出了超窗口大小的数据,则接受方的tcp将丢弃它。这两点保证了tcp是可靠传输的。

UDP不可靠数据传输原理
udp只有一个socket接受缓冲区,没有socket发送缓冲区,即只要有数据就发,不管对方是否可以正确接受。而在对方的socket接受缓冲区满了之后,新来的数据包无法进入到socket接受缓冲区,此数据报就会被丢弃,udp是没有流量控制的,故udp的数据传输时时不可靠的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值