TCP、UDP、网络模型、网络协议

本文详细介绍了TCP和UDP两种传输层协议,包括它们的特点、工作原理和区别。此外,还讲解了网络适配器、路由器、交换机等网络设备的作用以及网络模型的各层功能。网络模型分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,每层都有相应的协议和服务。最后,探讨了网络协议的重要性以及为何需要分层处理。
摘要由CSDN通过智能技术生成

1.网络适配器又称网卡或网络接口卡(NIC),英文名NetworkInterfaceCard。Emulex网络适配器的内核是链路层控制器,该控制器通常是实现了许多链路层服务的单个特定目的的芯片,这些服务包括成帧,链路接入,流量控制,差错检测等。网络适配器是使计算机联网的设备,平常所说的网卡就是将PC机和LAN连接的网络适配器。网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上其它设备能够识别的格式,通过网络介质传输。它的主要技术参数为带宽、总线方式、电气接口方式等。
每个网卡会携带一个MAC物理地址,网卡其实是一个输入输出设备。网卡与网卡之间用双绞线连接。​两大技术:网卡驱动程序和I/O技术。驱动程序使网卡和网络操作系统兼容,实现PC机与网络的通信;I/O技术可以通过数据总线实现PC和网卡之间的通信。
路由器(Router,又称路径器)是一种计算机网络设备,它能将数据包通过一个个网络传送至目的地(选择数据的传输路径),这个过程称为路由。路由器就是连接两个以上个别网络的设备。
交换机(switch)是一种在通信系统中完成信息交换功能的设备。
路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层(网络层)。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以两者实现各自功能的方式是不同的。
协议 IP地址:目前最流行的就是IPv4,有十进制和二进制两种表示方法。分别是:点分四组十进制。每一组范围是[0~255],如:255.255.255.255
二进制如:11111111 11111111 11111111 11111111
IPV4被分为五大类:ABCDE
A类为:点分四组中的第一组地址范围为0~127的IP地址。以二进制来看就是“首位为0”
B类:128~191.二进制首位为10
C类:192~223.二进制首位为110
D类:224~239.二进制首位为1110
E类:240~255.二进制首位为1111
IPv6地址长度是128位,由8块(或8个字段)组成,每一块都包含四个16进制数,每块由冒号分隔。有以下特点:
(1)一个块中前导的0不必书写。
(2)全0的块可以省略,并用符号::代替。
(3)IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。表示方式为:IPv6块值为ffff,其后面紧跟“点分四组”的格式。如:::ffff:10.0.0.1,可以代表IPv4:10.0.0.1
(4)IPv6的低32位通常采用点分四组(就是上面那样)的表示法。
Ping命令主要的功能是用来检测网络的连通情况和分析网络速度
TTL是 Time To Live的缩写,生存时间(域名解析在DNS服务器中存留时间)该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段。

**netstat命令:**定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
该命令的一般格式为 :netstat [-a][-e][-n][-o][-p Protocol][-r][-s][Interval]
在这里插入图片描述
在这里插入图片描述
网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。
例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是QQ、微信这类软件了。

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,三次握手协商。
特点:①面向连接的传输;②端到端的通信;③高可靠性,确保传输数据的正确性,不出现丢失或乱序;④全双工方式传输;⑤采用字节流方式,即以字节为单位传输字节序列;⑥紧急数据传送功能。
TCP协议属于传输层协议,而我们写代码一般是直接使用封装好的tcp工具或者应用层协议来驱动传输层的工作。
如果我们想在JAVA语言中,驱动TCP协议来传输数据,那么我们可以使用JAVA封装好的工具叫做Socket (套接字)编程实现。
JAVA给出的TCP套接字就是Socket,而需要分清楚服务器和客户之间使用的不同,服务器端使用的是ServerSocket,客户端使用的是Socket。

UDP (User Datagram Protocol,用户数据报协议)是 OSI 参考模型中一种无连接的传输层协议,在第四层——传输层,处于IP协议的上一层,提供面向事务的简单不可靠信息传送服务,无协商。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。UDP协议适用端口分别运行在同一台设备上的多个应用程序。
对于UDP来说,发送数据使用的是DatagramSocket,接收数据也是使用的DatagramSocket,所以DatagramSocket没有所谓的明显的服务器和客户端的区别。
DatagramSocket是收发数据的工具,但并不关心数据发送去哪里,或者是从哪里来,它只做一件事,就是要么将数据发到网络当中,让数据自己去该去的地方(你去哪和我没关系);要么就是从网络里面打捞出来自己要的数据(小数据包长得还挺好看)。
真正的内容容器是DatagramPacket。
这个报文在发送端,我们要设置其发送的内容、地址、端口号等等,设置完给DatagramSocket就可以了;
在接收端,我们要通过DatagramSocket来接收数据,接收的数据在byte[]里面,拿出来就用。
UDP传输数据的过程中,没有流的概念,只有报文的概念。

什么是Socket
    网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户端和
服务器的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
    但是,Socket所支持的协议种类也不光TCP/IP、UDP,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于
TCP/IP协议的网络编程。
    socket连接就是所谓的长连接,客户端和服务器需要互相连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉的,但是有
时候网络波动还是有可能的。
    Socket偏向于底层,一般很少直接使用Socket来编程,框架底层使用Socket比较多。
    
 Socket通讯的过程:
    基于TCP:服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这
    时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发
    送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

    基于UDP:UDP 协议是用户数据报协议的简称,也用于网络数据的传输。虽然 UDP 协议是一种不太可靠的协议,但有时在需要较快地接
    收数据并且可以忍受较小错误的情况下,UDP 就会表现出更大的优势。我客户端只需要发送,服务端能不能接收的到我不管

TCP与UDP之间的区别:
(1)TCP是基于字节流的,UDP是数据报文模式。
(2)TCP的传输是可靠传输,UDP的传输是不可靠传输。
(3)TCP是面向连接的,UDP是面向非连接的。
(4)TCP传输效率低,UDP传输效率高。
(5)TCP需要收发双方握手建立连接,传输数据包也需要应答,因此在保证数据交付的同时可以进行复杂的流量控制等;
UDP收发双方都不知道对方的存在,只是尽力交付,也无法进行流量控制。
(6)TCP对系统资源要求高,开销大;UDP对系统资源要求低,开销小。
(7)TCP支持全双工,UDP支持一对一、一对多、多对一、多对多;
(8)TCP有滑动窗口,有慢开始、拥塞避免、快重传、快恢复;UDP没有,适用于哪些系统对性能的要求高于数据完整性的要求,需要“简短快捷”的数据交换、需要多播和广播的应用环境。

全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。举例:电话通信。
单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。
半双工数据传输允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。

1.TCP
三次握手:
在这里插入图片描述

在这里插入图片描述
三次握手(Three-Way Handshake):
即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。 首先服务器端,必须先开启某一个端口的监听;
(1)由客户端向服务器的监听端口发起一个SYN请求,其中SYN等于一个数字,SYN = x 发送的时候,客户端需要选择一个自己的端口发送该SYN请求,一般来说,客户端选择的端口都是随机的。但是当选择完这个端口以后,就一直使用这个端口传输数据,在该连接没有断开之前,不会换端口。当发送完SYN请求以后,客户端的该端口状态变成了SYN_SENT状态;
(2)当服务器端的监听端口收到客户端发送的SYN=x这个数据的时候,自己的端口状态就变成了SYN_RCVD;同时,向发送SYN的客户端的那个端口回复一个数据,这个数据包含两条信息,一个是SYN = y, 另一个是 ACK = x+1;
(3)当客户端收到服务器发过来的SYN + ACK 消息的时候,我的客户端就会将端口立刻变化成Established状态;同时,客户端会发送一条数据给服务器,这个数据是ACK = y+1;
(4)当服务器收到客户端发来的ACK = y+1 的时候,服务器中的SYN_RCVD状态就变成了Established状态。完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手:
在这里插入图片描述
FIN:代表我不再向你发送数据了(也就是不再调用输出流,但并不代表输入流已经完成);
ACK:代表我已经确认接受完消息了。
在这里插入图片描述
四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,Server进入CLOSED状态,完成四次挥手。在这里插入图片描述

在这里插入图片描述为什么不能用两次握手进行连接?
答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
答:TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

网络模型:
在这里插入图片描述
每一层实现各自的功能和协议,并且都为上一层提供业务功能。为了提供这种业务功能,下一层将上一层中的数据并入到本层的数据域中,然后通过加入报头或报尾来实现该层业务功能,该过程叫做数据封装。用户的数据要经过一次次包装,最后转化成可以在网络上传输的信号,发送到网络上。当到达目标计算机后,再执行相反的数据拆包过程。
在这里插入图片描述
**物理层:**主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
主要作用是将数据最终编码为用 0、1 标识的比特流,通过物理介质传输,这一层的数据叫做比特。
**数据链路层:**主要将接收的数据进行 MAC 地址(网卡地址)的封装与解封装,常把这一层数据叫做帧,这一层常工作的设备是交换机。
**网络层:**主要将接收到的数据进行 IP 地址的封装与解封装,常把这一层的数据叫做数据包,这一层设备是路由器。
**传输层:**定义了一些数据传输的协议和端口号,主要将接收的数据进行分段和传输,到达目的地址后在进行重组。常把这一层数据叫段。
**会话层:**通过传输层建立数据传输的通路,主要在系统之间发起会话或者接收会话请求。
**表示层:**主要进行对接收数据的解释、加密与解密、压缩与解压缩,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
**应用层:**主要是为一些终端应用程序提供服务,直接面对着用户的。

网络协议简介:https://baike.so.com/doc/5403497-5641193.html
使用TCP协议的常见端口主要有以下几种:
(1) FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2) Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3) SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Foxmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮箱来收信)。

使用UDP协议端口常见的有:
(1) HTTP:这是大家用得最多的协议,它就是常说的"超文本传输协议"。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说"WWW服务"、“Web服务器"用的就是这个端口。
(2)DNS:用于域名解析服务,这种服务在Windows NT系统中用得最多的。因特网上的每一台计算机都有一个网络地址与之对应,这个地址是常说的IP地址,它以纯数字+”."的形式表示。然而这却不便记忆,于是出现了域名,访问计算机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53号端口。
(3) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(4) OICQ:OICQ程序既接受服务,又提供服务,这样两个聊天的人才是平等的。OICQ用的是无连接的协议,也是说它用的是UDP协议。OICQ服务器是使用8000号端口,侦听是否有信息到来,客户端使用4000号端口,向外发送信息。

客户端和服务器传递内容(协议)的形式:字节(主要)、字符
传输方式:TCP、UDP (传输层)

网络协议是什么?
在计算机网络要做到井井有条的交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。

为什么要对网络协议分层?
简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题;
灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响;
易于实现和维护;
促进标准化工作。分开后,每层功能可以相对简单地被描述。

**
协议** 定义的是一些列的通信标注,通信的双方需要共同按照这一个标准进行正常的数据收发;
在计算机通信方面,通信协议用于实现计算机与网络连接之间的标注,如果没有统一的通信协议,电脑之间的信息传递就无法识别,通信协议就是通信双方事前约定好的通信规则,可以简单的理解为各个计算机之间进行相互会话所使用的共同语言。

协议栈是协议的具体的实现形式,我们通俗的来讲就是用代码实现的库函数,从而方便开发人员的调用。
协议栈(Protocol Stack) 是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,FTP,TFTP,TELNET,DNS,EMAIL等),传输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI,MAC等),物理层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值