• 学习几个协议


    TCP VS UDP

    相同点:

    首部都包含了16位的源端口号、目的端口号和校验和。都是基于IP协议的传输层协议。

                  图一 TCP首部

                  图二 UDP首部

    差异点:

    1、  连接:TCP是面向连接的,需要通过三次握手建立连接,数据交互还有ACK机制,UDP没有连接的概念;

    2、  可靠:TCP是可靠的,UDP是不可靠的;

    3、  数据包顺序:TCP会对数据包进行重排序,而UDP本身不会重排序,只能依赖应用对数据重排序;

    4、  传输速度:TCP要慢于UDP,因为UDP只管发送,一旦发出去就不管了;

    5、  头部大小:TCP大小20字节,UDP大小8字节;

    6、  数据流:TCP是字节流,UDP是数据报;

    7、  数据流控:TCP通过滑动窗口和拥塞控制来进行流控,UDP没有流控;

    8、  错误检查:TCP会进行错误检查和错误恢复,通过快速重传和快速恢复来实现,而UDP是不会进行错误检查的,所以也没有错误恢复的概念;

    9、  头部数据结构:从图一、图二知道TCP的数据结构比UDP复杂; 

    基于TCP/UDP的协议

    TCP

    UDP

    HTTP, HTTPs, FTP, SMTP, Telnet等

    DNS, DHCP, TFTP, SNMP, RIP, VOIP等

    咱们借着生活中的上网这个场景来学习下几个协议。

    1、DHCP

    随着网络的发展,现在大家上网几乎都是通过无线网卡对接路由器,路由器再对接运营商,很少自己再配置IP、子网掩码、网关等,因为这些对于大部分普通网民来说,都略显专业,但是如果要上网,是不可能绕过IP地址等去实现的,这个时候就是DHCP协议发挥作用的时候。

                                     图三 DHCP抓包

                            图四 序号1

                            图五 序号2

    从如上截图可以看出DHCP是基于UDP的,图四对应图三的序号1,图五对应的是图三的序号2。

    序号1的Ethernet源地址就是本机MAC,目的地址这个时候不知道,就设置为ff: ff: ff: ff: ff: ff,通过广播的方式发送出去,对应的网络层,可以看到源地址和目的地址这个时候都不知道,所以分别设置为了0.0.0.0和255. 255. 255. 255,对应的应用层,按DHCP协议设置好的,发送方为68端口,接收方为67端口。数据报基本就是按照上述构造完成,然后广播发送出去,因为Ethernet设置为了ff: ff: ff: ff: ff: ff,所以每个接收方收到后都必须进行分析,当看到发送方IP是0.0.0.0,接收方为255. 255. 255. 255,DHCP服务器知道这个是给自己的,其他接收方则丢弃。

    序号2就是DHCP服务器给出响应,可以看出Ethernet发送方为TP-Link(我的无线路由器)和接收方(我的电脑 看图六MAC地址),IP地址则分别为路由器IP和本机电脑IP,端口刚好和序号1相反。

    经过DHCP协议,我的电脑获取到可上网的IP和其他各项配置。

            图六

    2、ARP

    分配好了IP之后,我的电脑就可以上网了,意味着可以传输IP数据了。传输IP数据又存在两种情况,一种是发送方和接收方位于同一子网,直接通过IP协议就可以将数据给到接收方,另一种则是发送方和接收方不在同一子网,此时便需要通过IP路由寻找到位于同一子网的路由器进行IP数据转发。这里对于鉴定同一子网和IP路由方式暂且不表,后续有机会再深入学习,对于上述两种方式,我们知道,不管怎么发送都需要先找到主机(接收方)或者路由器。我们只有IP地址,没有物理地址,这个时候ARP协议派上用场,将IP地址转换为物理硬件地址。

                                   图七

                            图八 序号10

                            图九 序号11

    从图八可以看出发送方是我的电脑(看图六),接收方是ff: ff: ff: ff: ff: ff,这是个广播地址,实际ARP本来也就是用作广播,将数据报发送给Ethernet每个接口,每个接口都需要对这个数据进行处理,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

    3、HTTP

    HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,HTTP基于TCP协议,是目前互联网快速发展的基础。以访问http://www.cnblogs.com/iou123lg/p/9017044.html为例来了解下这个协议。

                                          图十

    图十是我用Wireshark抓取的该URL请求,由于整个过程很长,对应的抓取图也比较长,所以我是多个图拼接成的图十。从图中一头一尾可以看出TCP的三次握手和四次挥手。中间体现的就是,在一次TCP连接中,依次发送了5次GET请求,可以看出每请求一次就要等待服务器响应一次。从图中也可以看出几个问题:

    3.1 发送方的发送是阻塞的,一起请求需等待一次响应,如果前一次响应失败,必然影响后续的操作;

    3.2 每次请求至少耗费一次RTT,这种非并发的请求,一旦量多就耗费的资源就很大了;

    3.3 建立一次TCP连接,是很耗费资源,这种HTTP请求处理方式未充分的利用TCP连接资源。

    这其实就是HTTP1.X和HTTP2.0一个重要的区别,HTTP1.X不支持多路复用,而新发展的HTTP2.0通过多路复用来解决上述问题,具体HTTP1.X和HTTP2.0的区别可以看参考链接。

    4、DNS

                              图十一

                             图十二 序号852

                             图十三 序号867

    在学习HTTP的过程中,有个点没有讨论,就是根据http://www.cnblogs.com/是怎样转换成去请求IP的,这个就是DNS的作用。DNS服务器的配置是在DHCP阶段已经分配好了,请求域名的时候,就是本机IP向DNS服务器请求域名转换过程,见图十一。

    从图十二中可以看到DNS服务器为10.64.0.100,本机IP向10.64.0.100请求cnblogs.com的IP,图十三给出了响应地址116.62.82.XX。细心的人可以发现这个IP和图十HTTP请求的IP不一样,这是因为对外暴露的IP是和域名有一一对应的关系,而实际应用处理请求时会从主机IP通过负载均衡给到实际应用服务器的IP。

            

    以上是我对几个协议的学习认知,如有不当描述,欢迎留言反馈。

    参考资料:

             http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

             http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

             https://www.zhihu.com/question/34074946

             https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/iou123lg/p/9064690.html
Copyright © 2020-2023  润新知