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