Tcp头部字段,与ip层关系,与udp区别,使用场景,Tcp状态

udp和tcp区别?为什么快,分清楚目的和手段

  1. tcp是传输控制协议,是面向连接的协议,发送数据前需要先在发送方和接收方之间建立连接,tcp提供可靠的服务,传输的数据无差错、不重复、不丢失、且按序到达。
  2. udp是用户数据报文协议,是面向无连接的协议,发送数据前不需要建立连接,是不可靠的协议。不能保证传输数据是否到达目的地,到达时间以及数据正确性。
  3. tcp面向字节流,udp面向数据报文。面向字节流指的是发送数据以字节为单位,一个数据包可以拆分成若干分组进行发送,而udp一个报文只能一次发完。
  4. tcp支持点对点通信,udp支持一对一,一对多,多对多
  5. tcp报文首部20个字节,udp报文首部8个字节
  6. tcp有拥塞控制机制,udp没有
  7. 对于实时性要求高的情况使用udp,如游戏、直播、媒体通信;其他大部分情况使用的都是tcp,如http,要求传输的内容可靠,不出现丢包。

tcp与udp优点缺点分析

Tcp的优点: 可靠,稳定
  TCP的可靠性体现在传输数据之前,三次握手建立连接(四次挥手释放连接),并且在数据传递时,有确认、窗口、重传、拥塞控制机制,数据传完之后,断开连接用来节省系统资源。
  
TCP的缺点:慢,效率低,占用系统资源高,易被攻击
  传数据之前建立连接,这样会消耗时间,而且在消息传递时,确认机制、重传机制和拥塞控制机制都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。而每个连接都会占用系统的CPU、内存等硬件软件资源。并且TCP的取而机制、三次握手,这些也导致TCP容易被人利用,实现DOS,DDOS攻击。

UDP的优点 :快,比TCP稍安全
  UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,udp是一个无状态的传输协议,所以他在传输数据时非常快。M没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。UDP也是无法避免攻击的,比如:UDP flood攻击。
  
UDP的缺点:不可靠,不稳定
因为UDP没有TCP的那些可靠机制,在网络质量不好时很容易丢包。

基于以上优点,那么:
UDP 是一种面向无连接,且不可靠的协议,在通信过程中,它并不像 TCP 那样需要先建立一个连接,只要(目的地址,端口号,源地址,端口号)确定了,就可以直接发送信息报文,并且不需要确保服务端一定能收到或收到完整的数据。它仅仅提供了校验和机制来保障一个报文是否完整,若校验失败,则直接丢弃报文,不做任何处理。


包头区别:
TCP包头结构  源端口16位  目标端口 16位  序列号 32位  回应序号 32位  TCP头长度 4位  reserved 6位  控制代码6位  窗口大小16位  偏移量16位  校验和16位  选项 32位(可选)   这样我们得出了TCP包头的最小大小.就是20字节.

UDP包头结构  源端口16位  目的端口16位  长度 16位  校验和 16位  UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.


tcp与udp应用场景?

什么时候应该使用TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于—些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

在日常生活中,常见使用TCP协议的应用如下:浏览器,用的HTTP,FlashFXP,用的FTP
Outlook,用的POP、SMTPPutty,用的TeInet、SSHQQ文件传输
什么时候应该使用UDP:

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
比如,日常生活中,常见使用UDP协议的应用如下:
QQ语音,QQ视频,TFTP


怎么把udp变为可靠传输,超时重传(定时器)和丢包重传(连续三个)分别应该怎么实现

把udp和tcp差异说出来

TCP如何实现可靠性传输?(先分析为什么tcp可靠)
确认机制、重传机制、滑动窗口。

udp如何实现可靠性传输?

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

实现确认机制、重传机制、窗口确认机制。
如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。


tcp和ip层关系
ip层只负责主机与主机之间的通信,tcp需要绑定端口实现进程间的通信。tcp是可靠传输的,ip只能尽力交付

仅考虑主机与主机之间的通信?没有可靠保证,是不是就会有大量丢包呢?整个网络的可靠性全部由传输层来保证吗?

可靠这个概念不仅仅是包是都按序全部到达,每一层都有自己的差错控制机制

差错控制这个概念呢?
主要是校验,保证接受到的包和发送的包的数据是一致的


常用头部字段

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。


11个状态

LISTEN:侦听来自远方TCP端口的连接请求

SYN-SENT:发送连接请求后等待匹配的连接请求

SYN-RECEIVED(syn已经收到的):收到和发送给一个连接请求后等待对连接请求的确认

ESTABLISHED(已建立的):代表一个打开的连接,数据可以传送给客户

FIN-WAIT-1:等待远程TCP的连接中断请求,或者先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSEING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来发向远程TCP的连接中断请求的确认

TIME-WAIT:等待足够的时间一确保远程TCP接受到连接中断请求的确认

CLOSED:没有任何连接状态

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值