网络通信总结

1 TCP/IP协议概念
传输控制协议(transport control protocol),应用程序通过TCP进行通信时,源和目标之间会建立一个虚拟连接。两台计算机可以把数据当做一个双向字节流进行交换。(IP协议是一种网络层协议,规定每个互联网上的计算机只能有一个唯一的ip地址)

2 TCP和UDP的区别
(TCP连接就像打电话,用户拨打特定的号码,对方拿起电话,双方进行通话。UDP就像发短信,是否收到是否回答,都不知道)
a TCP是面向连接的传输控制协议,UDP提供的是无连接的数据包服务。
b TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据进行检查和修改,无需等待对方的应答,所以会出现分组丢失、重复、乱序的情况。
c TCP对系统资源要求较多,UDP对系统资源要求较少。
d UDP具有较好的实时性,工作效率较高。
e UDP的段结构比TCP的段结构简单,网络开销小。

3 什么叫三次握手?什么叫四次断开?
TCP/IP中,采用三次握手来建立一次连接。SYN: 表示建立连接 FIN: 表示关闭连接 ACK: 表示响应
第一次握手:建立连接时,客户端发送SYN包(假如序列号SEQ=100)给服务器,并进入SYN_SEND状态,等待服务器的确认。
第二次握手:服务器收到SYN包之后,必须确认客户端,要发送ACK包(ACK=101),同时服务器还必须发送SYN包(序列号SEQ=300)等客户端的确认,此时服务器进入SYN_RECV状态。
第三次握手:客户端接收到SYN+ACK包,向服务器发送确认包(ACK=301),该包发送完毕,此时客户端和服务端进入ESTABLISHED,两者就可以进行数据交换了。
关闭连接的四次断开:
a 客户端发送数据完毕之后,发送一个FIN,提出断开连接请求。
b 服务端收到FIN包后,对其做出响应,发送一个ACK包,确认这一方向的连接将关闭
c 等服务器的应用程序做好关闭准备时,服务器反方向发送一个FIN
包给客户端,请求关闭连接。
d 客户端对服务器发送的请求进行确认,并发送ACK包。

引申:
TCP为什么需要3次握手,采用两次握手可以吗?
采用三次握手是为了防止失效的连接请求突然又传送到服务器端,因而产生错误。
为什么建立连接需要三次,关闭连接却需要4次?
因为服务端监听状态下的SOCKET收到SYN报文的建立连接请求后,可以把ACK和SYN放在一个报文里大宋。但关闭连接时,当接收到对方的FIN报文通知时,它仅仅表示对方没有数据给你了;但你的数据未必都发送给对方了,所以也不会马上关闭SOCKET,所以还是要先发送一些数据给对方后,再发送FIN报文给对方表示同意现在关闭连接,所以ACK和FIN报文多数情况下是分开发送的。

4 如何使用socket编程
流程如下:
服务器:建立socket()套接字->bind()将套接字与本地地址绑定->listen()开始监听连接请求->accpet()接收到连接请求,等待客户端连接->与客户端建立连接->开始通信recv()/send()->关闭套接字
客户端:建立socket()套接字->connect()发出连接请求->与服务器建立连接->开始通信>关闭套接字
其中主线程有一个socket绑定在一个固定端口上,负责监听客户端的socket信息,每当客户端发送一个连接请求,服务器端就开启一个线程,并在其中创建一个socket与客户端的socket通信,直到客户端关闭,结束该线程。主线程中的socket在应用程序退出时关闭。

5 阻塞与非阻塞模式的区别
默认套接字是阻塞的。
从发送和接收两方面来说明区别。
a 发送(write)
对于一个TCP套接字,内核将从应用进程的缓冲区向该套接字的发送缓冲区复制数据,对于阻塞的套接字,如果其发送缓冲区没有空间,进程将被挂起,直到有空间为止;对于非阻塞的套接字,如果其发送缓冲区根本没有空间,发送函数将立即返回EWOULDBLOCK错误。如果其发送缓冲区有一些空间,返回值将是内核能够复制到该缓冲区的字节数。
b 接收(read)
如果某个进程对一个阻塞的TCP套接字调用输入函数,而且该套接字的接收缓冲区没有数据可读,该进程将被挂起,直到到达一些数据(只要到达一些数据,该进程就会被唤醒);对于非阻塞的套接字,如果接收操作不能满足,相应的嗲用将会立即返回一个EWOULDBLOCK错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值