TCP/UDP对比

1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前 不需 要建立连接

2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4.  每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5.  TCP首部开销20字节;UDP的首部开销小,只有8个字节 6.  TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

端口号作用

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等 这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。 实际上是通过“IP地址+端口号”来区 分不同的服务的。 端口提供了一种访问通道, 服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。

2.1 TCP 的三次握手

所有的问题,首先都要建立连接,所以首先是连接维护的问题

TCP 的建立连接称为三次握手,可以简单理解为下面这种情况

A:您好,我是 A
B:您好 A,我是 B
A:您好 B

刚开始的时候,客户端和服务器都处于 CLOSED 状态,先是服务端主动监听某个端口,处于 LISTEN 状态。然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。服务端接收了发起的连接,返回 SYN,并且 ACK ( 确认 ) 客户端的 SYN,之后处于 SYN-SENT 状态。客户端接收到服务端发送的 SYN 和 ACK 之后,发送 ACK 的 ACK,之后就处于 ESTAVLISHED 状态,因为它一发一收成功了。服务端收到 ACK 的 ACK 之后,也处于 ESTABLISHED 状态,因为它也一发一收了。

2.2 TCP 四次挥手

说完建立连接,再说下断开连接,也被称为四次挥手,可以简单理解如下

A:B 啊,我不想玩了
B:哦,你不想玩了啊,我知道了
这个时候,只是 A 不想玩了,即不再发送数据,但是 B 可能还有未发送完的数据,所以需要等待 B 也主动关闭。
B:A 啊,好吧,我也不玩了,拜拜
A:好的,拜拜

这样整个连接就关闭了,当然上面只是正常的状态,也有些非正常的状态(比如 A 说完不玩了,直接跑路,B 发起的结束得不到 A 的回答,不知道该怎么办或则 B 直接跑路 A 不知道该怎么办),TCP 协议专门设计了几个状态来处理这些非正常状态

断开的时候,当 A 说不玩了,就进入 FIN_WAIT_1 的状态,B 收到 A 不玩了的消息后,进入 CLOSE_WAIT 的状态。

A 收到 B 说知道了,就进入 FIN_WAIT_2 的状态,如果 B 直接跑路,则 A 永远处与这个状态。TCP 协议里面并没有对这个状态的处理,但 Linux 有,可以调整 tcp_fin_timeout 这个参数,设置一个超时时间。

如果 B 没有跑路,A 接收到 B 的不玩了请求之后,从 FIN_WAIT_2 状态结束,按说 A 可以跑路了,但是如果 B 没有接收到 A 跑路的 ACK 呢,就再也接收不到了,所以这时候 A 需要等待一段时间,因为如果 B 没接收到 A 的 ACK 的话会重新发送给 A,所以 A 的等待时间需要足够长。

网络编程:概述TCP/UDP以及端口号的作用相关推荐

  1. 【Java 18】网络编程 - 概述、网络编程要素、IP和端口号、网络协议、TCP、UDP、URL

    网络编程 - 概述.网络编程要素.IP和端口号.网络协议.TCP.UDP.URL 网络编程 1 网络编程概述 2 网络通信要素概述 3 通信要素1:IP和端口号 3.1 内容 3.2 InetAddr ...

  2. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信

    如今,计算机已经成为人们学习.工作.生活必不可少的工具.人们利用计算机可以和亲朋好友在网上聊天,玩网游或发邮件等,这些功能的实现都离不开计算机网络.计算机网络实现了不同计算机之间的通信,而这些必须依靠 ...

  3. 网络编程及TCP/UDP协议

    网络编程 1.1.概述 地球村:你在西安,一个在美国 打电话--连接--接了--通话 TCP 发短信--发完了就完事了--接收 UDP(丢包) 计算机网络: 计算机网络系统就是利用通信设备和线路将地理 ...

  4. 网络编程入门 TCP/IP 协议 端口 IP 软件结构

    目录 一.软件结构 二.网络通信协议 三.协议分类: 四.网络编程三要素:协议,ip,端口号 1.协议 2.IP地址 3.IP地址分类 a.IPv4 b.IPv6 4.IP常用命令 1. 查看本机IP ...

  5. 网络编程、tcp udp

    什么是网络编程? 网络编程可以让程序与网络上的其他设备中的程序进行数据交互. 网络通信基本模式 常见的通信模式有如下2种形式:Client-Server(CS).Browser/Server(BS) ...

  6. 02_11_Java语音进阶||day11_网络编程【TCP|UDP】

    第一章 网络编程入门 1.1 软件结构 两种架构各有优势,但是无论哪种架构,都离不开网络的支持."网络编程",就是在一定的协议下,实现两台计算机的通信的程序 1.2 网络编程三要素 ...

  7. 【网络编程】TCP/UDP/HTTP的区别和联系

    一.参考资料 TCP/UDP/HTTP的区别和联系_唯爱丶卡卡西的博客-CSDN博客 HTTP.UDP.TCP区别 - 知乎

  8. Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  9. Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

    目录 1 网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4 InetAddress的使用 1.5 端口 1.6 协议 2 UDP通信程序 2.1 UDP通信原理 2 ...

最新文章

  1. 100m和1000m网线的常见制作方法
  2. Acwing145. 超市[C++题解]:贪心
  3. 为什么你应该使用OpenGL而不是DirectX?
  4. 断言assert使用方法
  5. quartz获取开始结束时间_Springboot集成quartz
  6. 超轻量级PHP框架BroPHP
  7. Moon一个无视Linq,无视实体类的设计思路.(不要错过,看了之后, 让我们从此以后不再羡慕linq to entiy!)...
  8. 推荐8款Windows装机必备下载神器【建议收藏】
  9. 凤凰 Remix android x86,主流 Android x86系统分享
  10. WWDC22 - In App Purchase 更新总结
  11. 切比雪夫多项式c语言csdn,切比雪夫多项式(Chebyshev polynomials)
  12. 微信公众号发红包 php,php微信公众号开发之现金红包
  13. 计算机如何分割硬盘,电脑硬盘怎么分区 电脑硬盘分区方法大全
  14. 更换苹果推送服务证书Apple Push Services Certificate
  15. 解决PHP提示Warning: Division by zero in错误
  16. Esp8266 -- 心知天气get请求及url讲解说明
  17. 最新文本转语音的接口(免费),百度语音作废
  18. Linux 压缩、解压、打包操作
  19. Ubuntu16.04 rc.local不生效,启动过程中报“Failed to start /etc/rc.local Compatibility”错误
  20. Java-使用集合存储快递的信息

热门文章

  1. Oracle的100+个常用函数
  2. 华为OD真题学习-查找单入口空闲区域 100
  3. Fiddler会话列表图标和文本颜色含义
  4. Vue-组件通信6种方式
  5. Ceph 的 Crush 算法原理(中文翻译)
  6. 【数据结构】中缀表达式转前缀表达式求值
  7. html可变换的背景图片,HTML用ONMOUSEOVER,ONMOUSEOUT改变背景色或背景图片的方法_html/css_WEB-ITnose...
  8. incaseformat蠕虫病毒
  9. 使用ncnn在树莓派部署自己的yolov5lites模型
  10. 【笔记】计算机指令集结构