TCP/UDP协议简要梳理
TCP/UDP协议简要梳理
TCP
TCP,Transmission Control Protocol,传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。在因特网协议族中,TCP所在的层位于IP层之上,应用层之下。
TCP面向连接。其实网络上的传输是没有连接的,包括TCP也是如此。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,从而从应用层看,它们是连接在一起的。所以,TCP的状态变换非常重要。尤其在进行数据传递前的三次握手和数据传递完毕之后的四次挥手操作。
可靠性是指TCP协议能确保,发送数据的一端能知晓数据是否安全到达接收方了。
基于字节流。TCP不在字节流中插入记录标识符,一个字节8bit,在8bit中,不会插入数据。因此TCP不知道传输的数据字节流是二进制数据还是ASCII字符。
报文段结构
其他特点:全双工协议、半关闭、错误检查、将数据打包成段、排序、确认反馈、流量控制(拥塞控制)。
tcp如何确保数据的可靠性?
要确保数据可靠的到达目的端系统,主要可以从两方面考虑:一是保证将提交给它的所有数据都发送出去;二是能够保证到达目的主机的数据都是可以检测是否准确的,不受损坏且顺序不变。通过以下几个特点来保证数据可靠传输:
- 分割。应用数据被分割成TCP最合适发送的数据块
- 反馈。当收到另一端的数据,它将发送一个确认包。这个确认包有一定的延时性
- 重传。当TCP发出一个包之后,它启动一个定时器,等待目的端反动确认收到的包,如果没有收到确认包,就重发这个报文段
- 差错检测
- 排序。可以对收到的数据包进行排序,然后提交到应用层
- 去重。对于重复数据,能够自行丢弃
- 流量控制(拥塞控制)。
- 三次握手和四次挥手过程
UDP
UDP,User Datagram Protocol,用户数据报协议是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
无连接,相对于TCP,传送数据前没有三次握手,也没有数据传送完成之后的四次挥手过程。
不可靠,不能确保数据是否安全达到接收方
分组首部开销小。每个TCP报文段都有20个字节的首部开销,而UDP仅需要8个字节
UDP报文段结构:
特点:无连接,不可靠,轻量,支持数据包正确性检测
比较异同
相同点:都属于传输层协议;都没有提供加密机制,不过有另一种协议——安全套接字协议SSL(Secure Sockets Layer),有加密机制。支持对数据包检测
不同点:
TCP |
UDP |
|
是否面向连接 |
是,三次握手和四次挥手 |
否 |
可靠性 |
可靠,提供确认反馈、超时重发,丢弃重复数据、流量控制 |
不可靠 |
负载大小 |
20+字节 负载相对大 |
8个 负载相对小 |
报文段构成 |
序号、确认号、数据偏移、控制标志窗口、校验和、紧急指针、选项等 |
长度、校验 |
使用场景 |
需确保数据完整性,对时效性要求略低。文件下载和上传 |
时效性要求很高。像现在的流行的直播,视频电话 |
TCP/UDP协议简要梳理的更多相关文章
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- QQ--基于TCP/UDP协议的通讯原理
QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的! 一 ...
- java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端
java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端 启动界面如下图: 首先启动服务器: 客户端登陆,登陆成功后为: 默认发送是全部用户,是多人发送. 当在边列 ...
- 网络编程—网络基础概览、socket,TCP/UDP协议
网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...
- Shell 脚本实现TCP/UDP协议通讯
Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html
- TCP/UDP协议(二)
面试问题:Tcp/Udp协议是什么,各有什么异同点,各自的使用场景? Tcp协议(传输控制协议) tcp是面向连接的协议,在收发数据之前,必须与对方建立可靠的连接: 三次握手:简单形象通俗描述: 主机 ...
- TCP UDP 协议的区别和联系
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起 ...
- NetworkComms框架介绍 完美支持TCP/UDP协议
NetworkComms网络通信框架序言 英文文章地址 :http://www.networkcomms.net/tcp-udp-connections/ NetworkComs.Net无缝的支持TC ...
- Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)
Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...
随机推荐
- 转载:Systemd 命令
目录 一.由来 二.Systemd 概述 三.系统管理 3.1 systemctl 3.2 systemd-analyze 3.3 hostnamectl 3.4 localectl 3.5 time ...
- R语言之正则表达式
常见与正则表达式相关的函数: grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, use ...
- 《剑指Offer 1.二维数组中的查找》2019-03-25
剑指Offer 第一题 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...
- 软件开发架构、网络基础知识、osi七层模型
一.软件开发的架构 涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就可以 ...
- Redux 管理React Native数据
现在让我们看看大致的流程: React 可以触发 Action,比如按钮点击按钮. Action 是对象,包含一个类型以及相关的数据,通过 Store 的 dispatch() 函数发送到 Store ...
- BZOJ 3878 【AHOI2014】 奇怪的计算器
题目链接:奇怪的计算器 如果没有溢出的话,所有的标记都可以在线段树上直接维护,所以一棵线段树就解决问题了. 现在有了溢出,怎么办呢? 发现就算溢出了,各个元素的相对大小关系也是不变的.所以,如果一开始 ...
- gym 101164 H.Pub crawl 凸包
题目链接:http://codeforces.com/gym/101164/attachments 题意:对于已知的 n 个二维坐标点,要求按照某种特定的连线方式将尽可能多的点连接(任意相邻的 3 个 ...
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- python 拷贝文件
使用绝对目录: import os import shutil shutil.copyfile("/opt/test/update.tar.gz","/opt/updat ...
- 部署NTP服务器进行时间同步
NTP服务端:linl_S IP:10.0.0.15 NTP客户端:lin_C IP:10.0.0.16 NTP服务概述 1.原理 NTP(Network TimeProtocol,网络时 ...