组播
广播
域tcp
域udp
项目中如何实现TCP的并发?
答:TCP在服务端中会先后遇到两次阻塞,不能切换客户端的请求和数据收发。
多进程:循环->在接收客户端连接请求后创建父子进程->父进程关闭连接请求 ->子进程数据收发
多线程:循环->在接收客户端连接请求后创建主线程->主线程关闭连接请求 ->分支线程数据收发
TCP通信过程三次握手?
答:第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0,代表客户端请求建立连接。
第二次握手数据包:服务器发回确信信息包,标志位为SYN,ACK,将确认序号设置为请求信号加1,即0+1=1。
第三次握手数据包:客户端再次发送确认包(ACK),标志位为SYN、ACK的序号都为1。
四次挥手的过程?
答:第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号 +1(与SYN相同,一个FIN占用一个序号),Server进入 CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个 ACK给Server,确认序号为收到序号+1,Server进入CLOSED状 态,完成四次挥手。
tcp/ip协议分几层?分别是那一层?
答:四层, tcp在传输层,ip在网络层。
①应用层:HTTP(Hypertext Transfer Protocol) 超文本传输协议
万维网的数据通信的基础
FTP(File Transfer Protocol) 文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用TCP传输
TFTP(Trivial File Transfer Protocol) 简单文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用UDP传输
SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议
一种提供可靠且有效的电子邮件传输的协议
②网络层:IP(Internetworking Protocol) 网际互连协议
是指能够在多个不同网络间实现信息传输的协议
ICMP(Internet Control Message Protocol) 互联网控制信息协议
用于在IP主机、路由器之间传递控制消息、ping命令使用的协议
IGMP(Internet Group Management Protocol) 互联网组管理
是一个组播协议,用于主机和组播路由器之间通信
③传输层:TCP(Transport Control Protocol) 传输控制协议
是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP(User Datagram Protocol) 用户数据报协议
是一种无连接、不可靠、快速传输的传输层通信协议
④数据链路层:ARP(Address Resolution Protocol) 地址解析协议
通过IP地址获取对方mac地址
RARP(Reverse Address Resolution Protocol) 逆向地址解析协议
通过mac地址获取ip地址
UDP为什么会丢包?
答:面向无连接的,不保证数据可靠的,尽最大努力传输的协议
数据传输过程中,可能出现数据丢失、重复、失序现象
限制每次传输的数据大小,多出部分直接忽略删除
tcp是同步还是异步,谈谈对同步和异步的理解?
答:TCP协议本身并不直接支持同步或异步操作。同步和异步操作是应用程序编程时的两种不同方式,用于处理网络通信。在.NET框架中,使用TCP进行网络编程时,提供了两种工作方 式:同步方式和异步方式。
同步方式:在同步模式下,程序执行到发送、接收或监听语句时,会一直阻塞直到该语句完成相应的工作后才继续执行下一条语句。这意味着,如果程序在等待接收数据,那么它会 一直阻塞 ,直到有数据接收为止。
异步方式:异步方式允许程序在执行到发送、接收或监听语句时,不论工作是否完成,都会继续往下执行。这意味着,如果程序在等待接收数据,那么它不会阻塞,而是会继续执 行后续的代 码。
总结来说,TCP协议既支持同步方式的网络编程也支持异步方式的网络编程。选择哪种方式取决于应用程序的具体需求和设计。
什么是tcp的沾包现象,如何解决?
答:为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送 ,该现象称为沾包现象
①定长发送法,发送端在发送数据时都以len为长度进行分包;
②尾部标记序列法,在每个要发送的数据包的尾部设置一个特殊的字节序列;
③头部标记分步接收法,定义一个用户报头,在报头中注明每次发送的数据包大小。
组播和广播的区别?
组播和广播是网络通信中使用的两种不同技术,它们的应用场景和工作原理有所不同。以下是组播和广播的主要区别:
组播是一种多对多的通信方式,其中消息被发送到一个特定的组播地址,只有加入该组播地址的主机才能接收到这个消息。组播允许发送方只向特定的一组接收方发送消息,可以在节省带宽的同时实现多对多通信,广泛应用于IP电话、视频会议、多媒体流等场景。1
广播是一种发送消息给所有主机的通信方式。在广播中,消息被发送到一个广播地址,该地址会被所有网络中的主机接收。广播是一种无条件的发送方式,因此它常常被用于网络中一些需要向所有主机广播消息的场景,例如DHCP自动分配IP地址和ARP协议中解析MAC地址等。
总结来说,组播和广播的主要区别在于它们发送消息的方式和目标接收者的范围不同。广播是一种无条件的发送方式,消息被发送到所有主机;而组播则是有条件的发送方式,消息只会被发送到加入该组播地址的特定主机。
阻塞IO和非阻塞IO的区别?
阻塞IO,指的是需要内核IO操作彻底完成后,才返回到用户空间执行用户的操作。阻塞指的是用户空间程序的执行状态。传统的IO模型都是同步阻塞IO。再Java中,默认创建的socket都是阻塞的。
非阻塞IO,指的是用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间执行用户操作,即处于非阻塞的状态,与此同时内核会立即返回给用户一个状态值。
简单来说:阻塞是指用户空间(调用线程)一直在等待,而不能干别的事情;非阻塞是指用户空间(调用线程)拿到内核返回的状态值就返回自己的空间,IO操作可以干就干,不可以干,就去干别的事情。
并发和并行的区别?
意思不同 。并发是指两个或多个事件在同一时间间隔发生;并行是指两个或者多个事件在同一时刻同时发生。
侧重不同 。并发侧重于在同一实体上;并行侧重于在不同实体上。
处理不同 。并发是在一台处理器上“同时”处理多个任务;并行是在多台处理器上同时处理多个任务。
执行顺序不同 。并发是宏观上是同时发生,但微观上是顺序执行;并行则无论是微观还是宏观都是同时执行。