信鸽头条
编程开发人员只有知道这些异常现象,才敢说真正懂了TCP协议

2019-07-27 14:04:12   来源:课工场郑州翔天信鸽

相关热词搜索:

很多编程开发人员认为只知道socket接口怎么使用就可以了,TCP/IP没用。如果参加工作,定位过线上问题就会知道,事实并非如此。
如果应用在局域网内,设备一切正常还好,一旦出现交换机不稳定、物理服务器宕机或者其他异常的情况,如果还只停留在套接字接口的理解层面将无法解决。因此,深入的了解TCP/IP协议对分析异常问题有很大帮助。
网络通信常见的架构主要有客户端和服务端2个部分,然而在实际工作中,环境要更加复杂。在客户端和服务端之间可能会有多种不同类和数量的设备,这些设备都会增加网络通信的复杂性,也会导致程序开发容错更加繁琐。
郑州翔天信鸽软件学院.jpg

异常情况分析
软件开发人员在工作中要了解这些异常情况才能更好的解决问题,将来游刃有余的处理各种突发情况。
1、试图与一个不存在的端口建立连接(主机正常)
这里所说的不存在的端口是指服务器端没有程序监听在该端口。我们客户端就调用connect,试图与其建立连接,这个时候会发生什么呢?
在这种情况下,我们的客户端往往会出现以下异常内容:
[Errno 111] Connection refused(连接拒绝)

郑州翔天信鸽软件学院4.jpg
服务端这时本来就没有程序监听在这个接口,因此无法完成连接的建立过程。其实当客户端的SYNC包到达服务端的时候,TCP协议没有找到监听的套接字,就会向客户发送一个错误的报文,告诉客户端产生了错误。这个报文就是一个包含RST的报文。
这种情况很容易模拟,只需要写一个小程序,连接服务器上没有监听的端口即可。
2、尝试和某端口建立连接但该主机已经宕机
某台服务器主机宕机是比较常见的,而客户端并不知情,依然会尝试与其建立连接。这种场景主要分为2种情况,一种是刚刚宕机,一种是宕机了很长时间。
 
这主要和ARP协议有关,ARP会在本地缓存失效,TCP客户端就向目的服务端发送数据包。
如果是刚刚宕机,这时客户端是可以向服务端发送数据包的,但是由于服务器宕机,因此不会和客户端发送任何回复。
客户端不知道服务器宕机,因此会重复的发送SYNC数据包,几乎每隔几秒就会发送一次,具体时间和TCP协议相关,不同的操作系统实现可能会稍有差别。
TCP协议.jpg

3、建立连接时,服务器应用被阻塞或者僵死
很多开发人员在工作中都会遇到这种情况,如果仅仅应用程序僵死,而内核没有僵死,会出现什么现象?TCP三次能否完成,客户端是否可以收发数据呢?
在用户层面,服务端通过accept接口返回一个新的套接字,就可以和客户端进行数据往来。

TCP协议2.jpg
简单来说,accept返回结果说明3次握手完成了,否则就会被阻塞。三次握手的本质就是客户端和服务端不断交流的过程,这个过程就是通过3个数据包完成的,而这些实际上都是在内核中完成的。总的来说,TCP的客户端是否可以发送数据和服务端程序是否工作没有任何关系。
好了,郑州课工场翔天信鸽软件学院今天就为大家分享到这里了,如果各位小伙伴想了解相关的IT知识可以关注我哦~想要学习IT相关课程可以登录郑州课工场翔天信鸽软件学院官网http://www.zz-kgc.com报名咨询哦~
郑州课工场翔天信鸽软件学院是专注做IT培训的学校。郑州课工场针对大学生,开设有Java培训、云计算培训、大数据培训、UI培训等课程。我们只推荐适合你的专业课程,助你成为更好的自己!

扫码获取更多
干货信息和视频教程
跟IT大咖专家一起交流学习
姓名
电话
QQ
推荐阅读
最新就业喜报
  • 祝贺T74班-刘*平入职郑州亿恩科技,月薪15000

  • 祝贺T73班-李*权入职郑州景安科技,月薪9500

  • 祝贺T94班-吴*同学入职郑州*汪洋科技,月薪15000

  • 祝贺T42班-张*君入职上海*海医疗,月薪6000+

  • 祝贺T52班-刘*同学入职郑州*凯德装饰,月薪8000+

  • 祝贺T37班-李*慧入职上海市*承机电工程有限公司,月薪8000+

  • 祝贺T94班-古*杰入职中国人寿郑州分公司,月薪9000+

  • 祝贺T26班-林*耿入职*龙桥科技有限公司,月薪9500(包吃住)

  • 祝贺T59班+李*强入职*郑州*设计有限公司,月薪7000

  • 祝贺T40班-李*同学入职上海市*家顺,月薪9000+

  • 祝贺T84班-李*深入职上海市*家文化传播有限公司,月薪8500+

  • 祝贺T106班-黄*英入职上海市*尔康净水科技有限公司,月薪9000+

  • 祝贺T46班-龚*峰入职上海*宝通广告有限公司,月薪8000+

  • 祝贺T74班-刘*同学入职上海市*一策划公司,月薪7000+

  • 祝贺T76班-王*同学入职*飞丝电子有限公司,月薪7600

  • 祝贺T99班-张*婵入职上海市*美姿美业文化传播有限公司,月薪9500+

  • 祝贺T27班-潘*东入职上海*速一元购,月薪8500+

  • 祝贺T84班-范*同学入职上海市*健康管理有限公司,月薪8000+

  • 祝贺T77班-周*峰入职上海市有限*科技有限公司,月薪9000+提成

  • 祝贺T80班-王*孝入职上海*博软件技术有限公司,月薪9000