目录

UDP和TCP

UDP

UDP首部

TCP

TCP报文段的首部格式

TCP的三次握手和四次挥手

传输层协议和应用层协议之间的关系

注意的网络安全

修改服务器默认端口

只开放必要端口


UDP和TCP

UDP

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP在传输数据之前不需要建立连接。对方的传输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP是一种很有效的工作方式。

UDP的几个特点:不编号(一个数据包解决数据通信)、不建立会话。

应用:聊天系统(发一句话过去就过去了,也不知道什么时候发下一句,如果没法发过去有办法让你知道没发过去。那么怎么解决包太大的问题,限制字数),DNS域名解析等(客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。)(总结一下它就是传输那些短暂,数据量不大的应用)

传输的协议数据单元:UDP报文

UDP首部


TCP

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流(比如计算机A传输文件给计算机B会将其转化为字节流的方式传给计算机B)的传输层通信协议。

TCP则提供面向连接的服务。TCP不提供广播或多播服务。由于TCP要提供可靠交付的、面向连接的运输服务,因此不可避免的增加了许多的开销。这不仅使协议数据单元的首部增大很多,还占用许多的处理机资源。

TCP连接的端点不是主机,不是主机的IP地址,不是应用程序,也不是传输层的协议端口,TCP连接的端点叫做套接字(socket),关于socket在我这篇博客有探讨过:https://blog.csdn.net/qq_36652619/article/details/98684022

TCP的几个特点:分段传输、编号(中间丢掉第几个包会叫它重传)、流量控制功能、建立会话。

每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。

应用:传输文件(分段传输对吧)、访问网站(需要传输的数据一个包解决不了),上传下载、看视频等

传输的协议数据单元:TCP报文段

TCP报文段的首部格式

可以看到首部有一部分是固定的长度,一部分是可变的。

序号:可以看到TCP首部结构图上面那张图中的分段【12】他的序号就是1(这个1代表整个文件的第一个字节),比如说第二个分段是【345】,那么他的序号就是3(这个分段第一个字节是整个文件的第三个字节),后面的以此类推。

确认号:对方计算机收到第一个分段,会返回一个确认让源计算机发第三个字节开始的分段,确认号就是让发送者下一个数据包该发什么。

数据偏移:TCP的首部也许是20个字节,也许更长,数据偏移记录TCP报文段多少个直接后是数据部分不是首部了。

URG:告诉计算机该数据包较为紧急

ACK:是0的话确认号无效,是1的话确认号有效

PSH:为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递

SYN:同步,表示建立连接

RST:为1证明TCP会话出现错误,必须释放连接(举例:打开百度首页,点击刷新网页按钮就这种情况)

FIN:为1,数据传完了,释放连接,正常结束

窗口:用于告知对方自己的能够接受的数据量大小。接受窗口和发送窗口可以看做上上张图的发送方和接收方的TCP缓存,在发送数据之前先要确定好窗口大小,比如发送方的窗口大于接收方的窗口,那发过去会超出对方的接受范围,所以一开始会确定好窗口,根据接收方确定好窗口。

选项:选项可能有MSS【规定数据包的最大长度是多少】,SACK【是否选择性确认】

填充:为了凑整数

TCP的三次握手和四次挥手

三次握手建立连接

客户端和服务器端最初肯定都是处于关闭状态,那么假设我们先打开服务器端,假设是一个Java Web的服务,我们开启Java Web的服务需要开启一个进程,我们还要开启Tomcat,那么我们就需要开启默认8080端口对吧,这个端口就是用于监听我们的客户端请求,我们的服务开启之后,就会开启一个TCP传输控制模块,里面定义了很多服务传输的相关信息,所以说我们打开了8080端口后服务器就进入监听状态,接受客户端的请求。

假设此时客户端发送一个请求数据包过来,在第一次请求建立连接的时候客户端发了一个SYN标志位为1,ACK为0的话,服务器知道客户端是第一次发起请求,服务端会对接收到的这个数据包进行回应。回应内容:ack(报文序号,值为请求报文序号 + 1,表示收到客户端 x 序号的数据包,可以建立连接),seq(它还会初始化一个序号),然后将SYN和ACK位置为1,然后客户端接收到服务端的数据包之后也对这个数据包进行相应,将ACK置为1,然后ack对服务端的数据包的序号进行相应,置为服务端请求报文序号 y + 1(表示客户端正确收到服务端返回的 y 序号的数据包,可以建立连接)。然后我们的数据传输通道就建立完毕。

(其实将上文TCP首部标志位搞清楚,这个过程看图一目了然)。

关于ACK与ack的区别

一个是确认值(Acknowledgement) ACK,是0的话确认号无效,是1的话确认号有效,就是首部结构那的ACK。

另一个是确认编号(Acknowledgement Number) ack,即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据。也就是确认号,在首部结构有介绍,确认号就是让发送者下一个数据包该发什么(也就是下一个数据包以第几个字节开头,若是还是不清楚可以看下篇博客的滑动窗口部分https://blog.csdn.net/qq_36652619/article/details/99219171)。

四次挥手

客户端给服务端发送请求,将标志位FIN(为1表示数据传完了,释放连接,正常结束)置为1,服务端就知道客户端想要断开连接,然后他会对该数据包进行响应,响应时对于FIN回复ACK这个确认值置为1,告诉客户端ok,将序号 seq加一代表已经收到客户端发来的所有数据。

然后这里引申出一个问题:为什么不设置成和三次握手一样三次就挥手完毕,而是四次挥手?

因为在握手的时候他们之间没有进行数据的传输,所以三次握手即可。客户端什么时候会发起断开请求?是在客户端没有需要请求的数据的时候会像服务器端发起断开的请求。那么断开请求的时候有可能是还在数据传输的,客户端没有需要请求的数据时,服务端有可能还在将一个大型的文件传到客户端,所以不能够单纯的三次挥手,因为服务端的响应是因为客户端发起的请求才响应的,是被动的,为了可靠传输,我们的服务器端也要保证没有数据了之后主动向客户端发起一次请求,说明自己可以断开连接。

服务端主动发起的挥手请求和客户端发挥手请求的过程很相似。


传输层协议和应用层协议之间的关系

http = TCP + 80 (做web的都晓得对吧)

https = TCP + 443

ftp = TCP + 21

SMTP = TCP + 25 (开发过发邮件服务的都会有印象)

DNS = UDP+53 or TCP + 53

(其实应用层对外的服务【Web、ftp等】运行后在TCP或UDP的某个端口侦听客户端的请求,可以看做客户端用IP地址定位机器,用端口来定位服务【端口代表服务】。)

注意的网络安全

可能这个点对于服务端的开发人员帮助比较大(本人对网安了解不算多,诸位大佬多担待)

修改服务器默认端口

黑客攻击之前可能会扫描目标服务器有哪些端口打开了,这样做的目的是来看该服务器开启了哪些服务,比如说21就开启了ftp,80就是Web

所以更改端口可以增强服务器安全,攻击者不知道是什么服务,就不好攻击了。

只开放必要端口

比如说对外只是一个网站,那么对外只开放80端口即可,即便其他服务有漏洞,攻击者也进不来

以上是对计算机网络基础(传输层和它的两个朋友TCP、UDP)的粗浅认识

转载请注明出处:https://blog.csdn.net/qq_36652619

计算机网络基础(传输层和它的两个朋友TCP、UDP)(传输层【上】)相关推荐

  1. 网络编程基础socket 重要中:TCP/UDP/七层协议

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间"一对所有"的通讯模式,网络对其中每一台主 ...

  2. 计算机网络基础面试题汇总

    计算机网络基础面试题汇总 网络协议和网络编程 重难点 参考资料来源于 netty权威指南(高性能的服务端开发) netty实战 Unix网络编程 AIO 鸟哥的linux私房菜 <刘超的趣谈网络 ...

  3. 云计算学习笔记——计算机网络基础及计算机网络参考模型

    第一章   计算机网络基础 一.什么是计算机网络 1.硬件方面:通过线缆将网络设备和计算机连接起来 2.软件方面:操作系统,应用软件,应用程序通过通信线路连接 二.网络功能 数据通信.资源共享.增加可 ...

  4. 超详细的计算机网络基础知识总结 第一章:概述

    本文基于:王道计算机考研-计算机网络 顺便提一嘴,王道计算机网络的小姐姐声音真滴好听 相关文章 超详细的计算机网络基础知识 第二章-物理层 超详细的计算机网络基础知识 第三章:数据链路层 超详细的计算 ...

  5. 计算机网络基础知识总结二(详细)

    计算机网络是考研的重点,也是日后工作最基本的知识点之一.本博文详细的总结了计算机网络的基础知识,方便日常查看和复习,希望有所帮助. 视频学习链接:https://www.bilibili.com/vi ...

  6. 计算机网络基础与应用的电子教案,计算机网络基础-教案-Internet基础与应用电子教案2...

    计算机网络基础-教案-Internet基础与应用电子教案2 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 第五章Internet基础与 ...

  7. 计算机网络基础考点笔记-1

    目录 一.网络互联网模型和常见协议--概念考点 1.互联网模型 2.常见的网络协议 (1)应用层协议--FTP/TFTP/HTTP (2)传输层协议--TCP/UDP (3)网络层协议--IP 二.I ...

  8. 【CyberSecurityLearning 22】传输层协议分析(TCP/UDP)

    目录 一.传输层协议: 1)TCP/IP协议族的传输层协议主要有两个: 2)TCP协议特点: 3)TCP报文段/封装 4)TCP包头分析: 5)TCP的三次握手建立连接 6)TCP的四次握手断开连接 ...

  9. 计算机网络基础3--TCP/IP协议栈

    TCP/IP协议栈 Transmission Control Protool/Internet Protocol TCP/IP是一个Protocol Stack,包括TCP.IP.UDP.ICMP.R ...

最新文章

  1. springboot超详细教程_全网最细致的SpringBoot实战教程,超适合新手小白入坑学习...
  2. fwrite ,fprintf的作用与区别
  3. 【深度学习】面向医学图像的病灶分割调研(二)
  4. 链接器ld程序的脚本文件u-boot.lds(二)
  5. 请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功
  6. easyui combobox下拉框 的取value text的API
  7. Electron客户端的自动升级方案-2022版
  8. 外汇EA量化交易,怎么提高交易水平
  9. 七夕,思念里的流浪狗在哭---众智云
  10. 老男孩教育46期-丁温郝
  11. linux怎么查硬盘是否故障,怎么检查硬盘是否有问题
  12. 反向代理-- WEB服务的加速器[转]
  13. 公司项目重构-Web安全-文件上传漏洞
  14. 我让我 9 岁的女儿利用 ChatGPT 来学习数学
  15. 一次性查寻出全国所有省份,城市,县区(解决多层for循环嵌套查询的问题)
  16. sparksql中大小表jion
  17. 2014计算机基础知识试题及答案,2014计算机基础知识试题及答案解析.doc
  18. 计算图的Node centrality
  19. 虚拟机和物理机之间互ping【局域网内ping不通,防火墙规则更改(win7为例)】
  20. 修炼心志,是伴随一生的日常

热门文章

  1. Linux安装unzip
  2. 蒙特梭利三段卡--大象三段卡 蒙氏教具 蒙台梭利早教
  3. 区块链技术与应用2——BTC-数据结构
  4. Dva model层的自己的理解
  5. Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息
  6. Go语言笔记:base64/sha1的使用
  7. 作为数据分析师,如何评估活动效果
  8. 节日不要随便发祝福短信--有感于11.1.11
  9. torch-geometric安装教程及常见源下载报错问题
  10. css中的定位以及绝对定位和相对定位的区别