甘肃省建设工程安全质量监督管理局网站,网站备案和域名备案一样吗,济南自适应网站建设,网站公司排行榜前十名传输层
定义一些传输数据的协议和端口#xff0c;传输协议同时进行流量控制#xff0c;根据接收方的数据吞入熟读#xff0c;规定适当的发送速率#xff0c;解决传输效率及能力问题
什么是TCP
TCP/IP即传输控制/网络协议#xff0c;是面向连接的协议#xff0c;发送数…传输层
定义一些传输数据的协议和端口传输协议同时进行流量控制根据接收方的数据吞入熟读规定适当的发送速率解决传输效率及能力问题
什么是TCP
TCP/IP即传输控制/网络协议是面向连接的协议发送数据前要先建立连接(发送方和接收方的成 对的两个之间必须建 立连接)TCP提供可靠的服务也就是说通过TCP连接传输的数据不会丢 失没有重复并且按顺序到达
TCP是怎么建立服务端与客户端双向通信可信型通道的
TCP三次握手是建立TCP连接的过程用于确认客户端和服务器之间的发送和接收功能是否正常。以下是TCP三次握手的具体细节
第一次握手客户端向服务器发送一个SYN包即同步序列号并进入SYN_SENT状态等待服务器的确认。此时SYN1seqxseq为客户端发送的序列号表示客户端请求与服务器建立连接。第二次握手服务器收到客户端发送的SYN包后会确认客户的ACK即确认号ackx1同时自己也发送一个SYN包即SYNACK包此时服务器进入SYN_RECV状态。SYN1ACK1seqyseq为服务器发送的序列号ackx1表示服务器已收到客户端的连接请求并请求客户端确认。第三次握手客户端收到服务器的SYNACK包后会向服务器发送一个确认包ACKacky1此包发送完毕客户端和服务器进入ESTABLISHED状态完成三次握手。此时客户端和服务器都知道彼此有收发能力可以开始传输数据了。
在三次握手过程中每个数据包都包含一个序列号seq和一个确认号ack。序列号用于标识发送方发送的数据包的顺序而确认号则用于确认接收方已成功接收到的数据包的顺序。通过比较序列号和确认号双方可以确保数据的正确传输和接收。
此外值得注意的是在第二次和第三次握手中服务器和客户端都会发送SYN和ACK标志位都为1的数据包这是因为SYN和ACK标志位在不同的阶段有不同的含义。在第二次握手中服务器的SYN标志位表示它正在请求与客户端建立连接而ACK标志位则表示它已接收到客户端的连接请求。在第三次握手中客户端的SYN标志位已不再需要因为连接已经建立而ACK标志位则用于确认已接收到服务器的SYNACK包。
总之TCP三次握手是一个非常重要的过程用于确保客户端和服务器之间的连接是可靠的并且可以正常地传输数据。通过三次握手双方可以确认彼此的发送和接收功能是否正常并建立稳定的连接。
用打电话IM的信令来比喻三次握手
甲给乙打电话 第一次握手 甲拨打乙的电话乙的手机接收到甲的通话请求 服务器确认客户端发送正常
第二次握手 乙的手机会同步返回一个信令告诉甲的手机大哥我收到了你的信息哦客户端确认自己发送和接收与服务器发送和接收都正常此时服务器只知道自己接收正常不知道自己发送是否正常
第三次握手 甲的手机接收到这个信令后确认了乙的手机可以呼叫的通继续呼叫重点是怎么确定是继续呼叫还是第一次呼叫这也就是那些丢来丢去的数据包做的事情客户端继续呼叫了服务器收到它的继续呼叫说明自己也发送成功了确认了双方都收发正常可以建立正常的通讯了
这三次握手是缺一不可的只要缺少就无法保证双向的接收都正常 实际上以上就已经是建立了可信型通讯通道了你实际上通讯的拒接或者收听都是建立在这个通讯通道建立的后续操作了
使用TCP协议的协议
使用TCP传输控制协议的协议有很多以下是一些常见的例子
HTTP超文本传输协议用于在Web浏览器和服务器之间传输数据。HTTPS安全超文本传输协议是HTTP的安全版本使用SSL/TLS对数据进行加密。FTP文件传输协议用于在客户端和服务器之间传输文件。POP3邮局协议用于从邮件服务器接收电子邮件。SMTP简单邮件传输协议用于发送电子邮件。Telnet远程登录协议允许用户通过终端登录到远程计算机。SSH安全外壳协议用于加密安全登录替代安全性较差的Telnet协议。
以上只是使用TCP协议的一部分协议实际上还有很多其他的协议也使用TCP进行数据传输。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议广泛应用于各种网络应用中。
TCP例子
package com.zxs;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServer {public static void main(String[] args) {try {ServerSocket server new ServerSocket(8081);System.out.println(等待客户端连接...);while (true) {Socket socket server.accept();System.out.println(客户信息为 socket.getRemoteSocketAddress());InputStream in socket.getInputStream();byte[] buffer new byte[1024];int len 0;while ((len in.read(buffer)) 0) {System.out.println(new String(buffer, 0, len));}OutputStream out socket.getOutputStream();out.write(1.getBytes());}} catch (IOException e) {e.printStackTrace();}}
}package com.zxs;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class TCPClient {public static void main(String[] args) throws IOException {Socket socket new Socket(127.0.0.1, 8081);OutputStream outputStream socket.getOutputStream();System.out.println(连接成功请输入);while (true) {byte[] car new Scanner(System.in).nextLine().getBytes();outputStream.write(car);outputStream.flush();}}
}什么是UDP
UDP它是属于TCP/IP协议族中的一种。是无连接的协议发送数据前不需要建立连接是没有可 靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输因此能否到达目的 地到达目的地的时间以及内容的正确性都是不能被保证的。
我只负责公告能不能收到是你们自己的事情
UDPUser Datagram Protocol是用户数据报协议它是OSIOpen System Interconnection开放式系统互联参考模型中一种无连接的传输层协议提供面向事务的简单不可靠信息传送服务。UDP协议主要用于不要求分组顺序到达的传输中分组传输顺序的检查与排序由应用层完成。
UDP协议的主要特点包括
面向无连接的协议速度快但是不可靠。只管发送数据不确认对方是否收到对方接收到数据之后也不会反馈一个信息给发送方。基于数据包报传输将要发送的数据源和目的地址封装的数据包中。数据包大小限制在64k以内。
用公司发送放假通知来比喻UDP的不负责
假如到了年底放假具体什么时候放假人事在群里发一个放假通知你Y的加没加群屏没屏蔽收没收到不关他的事他反正是通知了
使用UDP协议的协议
使用UDP用户数据报协议的协议主要有
DNS域名系统DNS用于将域名转换为IP地址。由于DNS查询和响应通常较小且不需要建立持续的连接因此DNS使用UDP进行通信。TFTP简单文件传输协议这是一种简单的文件传输协议通常用于嵌入式系统和网络设备的固件更新。TFTP使用UDP进行数据传输。RIP路由信息协议RIP是一种用于在自治系统AS内部网关之间传递路由信息的动态路由选择协议。RIP使用UDP进行通信。DHCP动态主机配置协议DHCP用于自动为网络中的主机分配IP地址。DHCP客户端和服务器之间使用UDP进行通信。SNMP简单网络管理协议SNMP用于网络管理系统收集和管理网络设备的信息。SNMP使用UDP进行通信。
此外还有一些实时性要求较高、数据量较小的应用场景也会使用UDP协议例如网络视频会议系统、在线视频、网络语音电话等。
需要注意的是虽然这些协议使用UDP进行通信但并不意味着它们完全不依赖TCP。在某些情况下这些协议可能会使用TCP进行辅助通信例如当需要建立连接或进行可靠的数据传输时。
UDP例子
package com.zxs;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;//UDP协议Socket服务端
public class UDPServer {public static void main(String[] args) {try {DatagramSocket socket new DatagramSocket(8082);System.out.println(服务端准备中...);while (true) {byte[] car new byte[1024];DatagramPacket packet new DatagramPacket(car, car.length);socket.receive(packet);int length packet.getLength();System.out.println(接收到的数据 new String(car, 0, length));System.out.println(UDP协议Socket接受成功);}} catch (IOException e) {e.printStackTrace();}}
}package com.zxs;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;public class UDPClient {public static void main(String[] args) {try {DatagramSocket socket new DatagramSocket(2468);InetSocketAddress address new InetSocketAddress(127.0.0.1, 8082);System.out.println(请输入你要公告的信息);while (true) {byte[] car new Scanner(System.in).nextLine().getBytes();DatagramPacket packet new DatagramPacket(car, car.length,address);socket.send(packet);System.out.println(UDP协议的Socket发送成功);}} catch (Exception e) {e.printStackTrace();}}
}