JAVA网络编程学习TCP、UDP

好久没写了,学习折磨人的期末考试

网络七层结构

国际标准化组织提出的开放式系统互联通信参考模型OSI(Open System Interconnection Reference Model)
在这里插入图片描述

各层的简要功能如上图

TCP/IP协议簇

T C P / I P协议族是一组不同的协议组合在一起构成的协议族,TCP是传输层的协议,IP是网络层的协议。

TCP/IP与七层结构各层之间的对应关系
在这里插入图片描述

  • 应用层:提供网络应用的服务

  • 传输层:保证源程序到目的程序的端到端的可靠通信(端口)

  • 网络层:源主机到目的主机间的可靠通信(IP)

  • 网络接口层:对应的是OSI中的数据链路层和物理层

    各层对应的协议
    在这里插入图片描述
    常用的协议端口号

应用程序端口号
FTP21
Telnet23
SMTP25
DNS53
TFTP69
HTTP80
SNMP161
数据在网络中传输的过程

在这里插入图片描述

  • 应用层对数据进行加密、格式转化等,其次是进行会话的建立发送数据。
  • TCP根据上一层发送的数据进行建立连接、发送消息、断开连接等操作。实现端到端的可靠传输。TCP为其数据封装一个TCP首部。
  • IP根据上一层发送的消息,为其封装一个IP首部,根据IP包参考路由控制表决定此数据包的去向。
  • 数据链路层接受到网络层发送的消息为其封装一个以太网首部。以太网首部中包含一个源MAC和目的MAC。
  • 经过物理层的转发到达另外一台主机,数据链路层找到以太网的首部,查找MAC地址是否是发给自己的数据包,不是则丢弃,如果是再根据相应的数据类型传给上一层IP。
  • 网络层接受到数据包,查看包首部,查看是否与自己的IP地址相同,如果相同则发送到TCP中。如果不同则通过路由控制表转发消息。
  • 传输层接收到网络层的数据包查看首部信息,计算校验和,查看序号,判断数据是否有序接收,确保数据的传输的准确性。其次是对应端口号找到对应的应用程序处理数据。
  • 应用层对数据进行解析、格式的转换展示相应的内容。

TCP报文格式

在这里插入图片描述

  • 端口号:端口和IP地址确定一条准确的连接。
    源端口号:标识主机上的某一应用。
    目的端口号:接收方计算机的应用程序接口。

  • 序号:序号是确保TCP的可靠传输以及接受顺序的准确性,以及接收方请求的下一数据包序号。

  • 确认号:接收方下一次期待接收的数据包,只有当ACK = 1的时候,确认号ack=x才有效。

  • 数据偏移/首部的长度:表示的是TCP首部的长度,TCP首部的长度最小占用20字节,如图每行占用4个字节,所以0101 转换为十进制54 = 20字节(最小字节数)最大字节数图中占用4bit位最大为1111转化为十进制154 = 60字节。

  • 保留:为将来定义新的用途保留,现在一般置为0。

  • 控制位:

    1 紧急URG:当等于1时有效,用途尽快的向另外一个主机交付当前的数据,不按原来的数据进行发送
    2 确认ACK:当等于1时有效,用途确认号ack有效。
    3 复位RST:当等于1时有效表示TCP连接中出现严重的错误,先断开连接,然后重新连接。
    4 同步SYN:当等于1时,表示一个连接的请求。
    5 终止FIN:当等于1时,表示一个断开连接的请求。
    6 推送PSH:当等于1时,表示立刻发送一个报文段,不需要等待缓存区填满就可以交付给应用程序。

  • 窗口:窗口的大小占用了2个字节,16个比特位,窗口的大小最大为2^16-1 = 65535,存在一个接受窗口和发送窗口。用来控制数据交付的速度。

  • 校验和:通过对整个TCP的数据包进行校验确保数据的准确性。

    在这里插入图片描述

  • 紧急指针:只有当URG等于1时紧急指针才有效,紧急指针是一个正偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。

三次握手

在这里插入图片描述
如上是TCP通过三次握手建立连接的。
为什么TCP要三次握手?两次握手可以吗?三次握手的目的?

三次握手确保了主机与服务器之间的可靠连接,不能进行两次握手,因为少了第三次握手会出现资源占用比较高的问题。原因是:假如客户端在进行第一次的连接请求后由于网络延迟比较高,他迟迟没有收到服务端回复的消息,他又重新发送一次连接请求,与服务端建立连接并且交互数据,然后断开连接。最后第一次的连接请求到达服务端并且连接,服务端一直等待客户端发送消息,客户端已经默认第一次为无效处理,浪费了服务端的资源。还有就是在客户端接收到服务端的消息时需要给服务端回复一个确认号,否则服务端会默认丢失。所以所三次握手是必不可少的。三次握手的目的:防止已经失效的连接再次连接。

四次挥手:

在这里插入图片描述
如图上就是TCP断开连接的过程:
TCP四次挥手可以改成三次挥手吗?什么条件下才可以三次挥手

不可以改成三次挥手,当数据晚于挥手消息到达客户端,数据可能会丢失,造成了数据接收不完整,违背了TCP的可靠传输的约定。
当客户端和服务端同时发送断开的请求时可以达到三次挥手的效果,就相当于两端都没有数据发送了,直接可以进行断开操作。
如图:同时发起断开在这里插入图片描述

TCP如何发送数据

在这里插入图片描述
发送缓冲区:TCP传输层数据包有大小限制,如果包过大的话,拆包成多个TCP包,发送的数据包过小,等待多个应用层消息打包成(粘包)一个TCP的数据包进行发送 TCP报文头至少是20个字节。
接收缓冲区:数据是没有明确的边界,接收数据是没办法指定一个或者多个消息一起读,只能选择一次读取多大的数据流,而这个数据流中包含着某个消息包的一部分数据。

TCP如何保证数据的可靠传输

  • 校验和:报文头的检验和用来保证当前传输包的完整性
  • 序列号:报文头中的序列号是用来对TCP包进行编号,接收端通过编号可 以对数据进行去重和排序
  • 确认应答机制(ACK)
  • 超时重传/快重传
  • 拥塞控制
TCP的流量控制

流量控制指的是通过滑动窗口协议使发送方的数据流量不要超过接受收方的数据流量。

滑动窗口协议

在这里插入图片描述
发送窗口只有接收到接收窗口返回的确认号以后窗口才会移动到下一个节点继续发送。

拥塞控制协议

在这里插入图片描述
防止过多的数据包注入到网络中。通过拥塞控制使网络中的路由器或者链路不可过载
慢启动,拥塞控制

快重传,快回复
在这里插入图片描述

UDP报文格式

在这里插入图片描述
源端口、目的端口:标识应用程序。
长度:UDP数据包的长度,包含头部和数据,最小值为8字节(仅包含头部)
校验和:用校验UDP包的完整性,有错包就丢失。

特点
  1. UDP是无连接的,发送之前不需要建立连接、减少了开销和发送数据之前的时延。
  2. UDP尽最大程度交付,不保证可靠的交付。
  3. UDP是面向报文的。UDP一次发送不管多大的报文都会在传输层封装上首部发送到网络层封装IP首部然后直接发送。
  4. UDP支持一对一、一对多、多对一的交互通信。
  5. UDP的首部开销比较小 ,适用实时性要求比较高的场景,比如视频,语言、直播…
  6. UDP没有拥塞控制不会降低源主机的发送效率。这样也会由于目的主机来不及接收数据从而造成数据的丢失。
如何保证UDP的数据不丢失?

借鉴TCP的ACK机制:UDP发送出的数据包,接收方接收到之后回复一个确认包,发送端若未接收到确认包可以再次返送。

TCP/UDP的区别

在这里插入图片描述
今天的你一键三连了吗?

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值