TCP/IP详解系列 --- 概念总结01
UDP协议 .vs. TCP协议:
原理上:(TCP报文段. vs . UDP用户数据报)
TCP协议的特性:
TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕之后,必须释放已建立的TCP连接。
每一条TCP连接只能有两个端点,每一条TCP协议只能是点对点的。
TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复并且按序到达。
TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
TCP是面向字节流(即流入到进程或从进程流出的字节序列)。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系,但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
TCP提供流量控制和拥塞控制。
UDP协议的特性:
UDP在传送数据前不需要先建立连接,远地主机的运输层在收到UDP报文后,不需要给出任何确认。
UDP不保证可靠交付,因此主机不需要维持复杂的连接状态表。
UDP是面向报文的。UDP保存应用层交下来的报文的边界(应用层交给UDP多长的报文,UDP就照样发送),一次发送一个报文。
UDP没有拥塞控制,吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制,因此网络出现的拥塞不会使源主机的发送速率降低。(这对某些实时应用是很重要的)。
UDP支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部开销小,只有8个字节,比TCP首部的最小长度20字节(如果不计任选字段)要短。
UDP无法提供的TCP特性:
1.正面确认,丢失分组重传,重复分组检测,给被网络打乱次序的分组排序。TCP确认所有数据,以便检测出丢失的分组。
2.窗口式流量控制。
3.慢启动和拥塞避免。
小结:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
使用场合上:
UDP:非常在乎延迟,不能忍受重传的场合,比如实时音频、视频;网络极度可靠,不用考虑UDP的丢包问题,比如专门为有限局域网设计的协议;如果数据报的起止判定对程序会产生大问题,那么也可以考虑使用UDP;NAT穿透,不得不用UDP。
From UNP卷一:对于广播或多播应用程序,必须使用UDP;对于简单的请求-应答应用程序可以使用UDP,不过错误检测功能必须加到应用程序内部。错误检测至少涉及确认(增加序列号)、超时和重传。对于海量数据传输(如文件传输)不应该使用UDP。
TCP:如果不是非要使用UDP的场合(如前所述),那么使用TCP更好。
一些细节:
UDP和TCP在首部中都有覆盖它们首部和数据的检验和。UDP的检验和是可选的,而TCP的检验和是必需的。
UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的。
衍生问题:QQ为什么使用UDP协议而不是TCP协议?
01.当时没有epoll这种可以支持成千上万TCP并发连接的技术,所以腾讯使用了UDP,然后在UDP上面封装了一下,模拟了一下TCP,解决了大并发的问题。
02.TCP因为拥塞控制、保证有序等原因,在当时的网络状态下对带宽的利用率很低。而且因为网络抖动的原因,应用层心跳超时(一般不依靠keepalive)应用层主动断掉socket之后TCP需要三次握手才能重新建立链接,一旦出现频繁的小抖动就会使得带宽利用更低。而等待四次挥手的时间,也会占用服务器上宝贵的资源。而如果使用UDP对抗网络抖动,就可以自己去实现在应用层比TCP更快地探测和重传,一旦超过一定的时间没有收到回复,客户端可以选择马上重试或者换一个IP:PORT重试(假如你的服务像QQ一样有多个接入),在服务器端则可以果断地断掉socket。这样,,在当时的情景下,利用UDP去实现一个面向连接的协议,在当时的网络条件下,就可以尽可能地降低网络抖动的影响,同时也可以尽可能地利用整个带宽。
03.总的来说:
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。
TCP协议相关:
TCP报文段的首部格式:
01.源端口与目的端口(这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接)
02.序号,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,而该序号字段值标注的则是本报文段所发送的数据的第一个字节的序号
03.确认号,是期望收到对方下一个报文段的第一个数据字节的序号
04.数据偏移,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
05.6个控制位:
URG: 当URG = 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。
ACK: 在连接建立后所有传送的报文段都必须把ACK置为1。
PSH: 接收方应尽快将这个报文段交给应用层。发送方立即创建一个报文段发送出去,接收方一收到报文段,就尽快交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
RST: RST=1表面TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或者拒绝打开一个连接。
SYN: 在连接建立时用来同步序号。
FIN: 当FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
06.窗口,指的是发送本报文段的一方的接收窗口,用于告知对端本端目前允许对方发送的数据量。
07.检验和。
08.紧急指针,指出本报文段中紧急数据的字节数。
TCP/IP详解系列 --- 概念总结01的更多相关文章
- TCP/IP详解系列 --- 概念总结02
TCP复位报文段(RST)的用途: 1.当客户端程序访问不存在的端口时,目标主机将给它发送一个复位报文段:收到复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段. 2.当客户端程序向服 ...
- 《TCP/IP详解 卷1:协议》系列分享专栏
<TCP/IP详解卷1:协议>是一本详细的TCP/IP协议指南,计算机网络历久不衰的经典著作之一. 作者理论联系实际,使读者可以轻松掌握TCP/IP的知识.阅读对象为计算机专业学生.教师以 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- TCP/IP详解 (转)
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...
- TCP IP详解(转)
大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...
- TCP/IP详解学习笔记 这位仁兄写得太好了
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...
- TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)
TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记 这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...
- 【转】TCP/IP详解学习笔记(一)
TCP/IP详解学习笔记 这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...
- TCP/IP详解学习笔记
TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...
随机推荐
- 最全面的 C++ 资源、框架大全
转载自 http://www.codeceo.com/article/cpp-resource-framework.html#0-tsina-1-99850-397232819ff9a47a7b7 ...
- MySQL索引原理及慢查询优化(转)
add by zhj:这是美团点评技术团队的一篇文章,讲的挺不错的. 原文:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰 ...
- EUI List列表实现人物列表
一 Scroll+List ,拖动组件到exml. List不能写定高度,不然无法自动扩展. 二 新建List条目皮肤, ListItemSkin皮肤 名字Label的文本{data.name} ...
- nagios二次开发(一)---开发思想
NAGIOS现状 从nagios的官网http://www.nagios.org/及其它已经公开的资料,我们可以知道:在web UI层nagios只提供了给我们查看图形界面的操作,界面上有简单的启 ...
- springmvc和http404错误
今天解决一个java中的springmvc的问题,所有配置都是对的,主页面也能打得开,唯独Controller层的方法打不开,一直报http404错误 package com.gold.control ...
- VS2013无法加载JSON格式
js中通过$.getJSON加载.json 文件时,报如下错误: 解决方案:dos命令中打开 IIS Express ,执行如下命令: appcmd set config /section:stat ...
- SQL日期格式,转自will哥
我之前一直認為 SQL Server 針對日期處理的函數不夠多(如果跟 MySQL 比較),尤其是處理日期欄位轉字串的時候,常常因為要輸出特定的格式而懊惱不已,常常一不小心就寫了一長串,很不易閱讀. ...
- APP测试之登录
我们公司产品登录很简单 手机号为账号,每次登录输入短信验证码.验证码为6位数字.登陆后可以记录登录状态.未登录时可以微信登录然后验证或者APP登录后可以在个人中心绑定微信. 一APP内部登录 1.手机 ...
- Ajax完整结构和删除
1.ajax完整结构 注意:(1)最后一个没有"," (2)ajax对网速要求高,最好有各种提示和使用按钮(可使其失效,防止重复加载) $.ajax({ url: "aj ...
- 如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作
点评:如何在HTML中加载Flash,为网页添加更多的色彩,普通的网页以无法满足用户的需求,接下来为大家介绍下2种在HTML中加载Flash的方法,感兴趣的各位可以适当参考下,希望对你有所帮助 第一种 ...