tcp端口号如何产生(TCP和UDP端口号)

      最后更新:2023-06-29 18:16

      tcp通信中怎么获得客户端的端口号?

      在连接建立以后 getsockname可取得本地的连接信息.包括端口号.
      tcp通信中怎么获得客户端的端口号?

      数据段的 TCP 报头中为什么包含端口号?

      TCP(Transmission Control Protocol)传输控制协议 TCp协议位于第四层。其代表的含义是传输控制协议(Transmission Control protocol)。TCP 在端点间建立连接或虚拟电路进行可靠通信。当一个数据包被封装之后,第三层当然有个Ip协议头,紧接着就是这个TCp协议头。TCp协议头成为了Ip协议头中的“数据”。就像其它协议都有自己的术语一样,TCp协议也有自己的专门术语,如以太网帧、Ip数据报和现在的TCp段等。你可以把它们都当作数据包。但是,当它们之间在进行通讯的时候,一定要使用正确的术语。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 TCP 的“端口号”完成的。网络 IP 地址和端口号结合成为唯一的标识 , 我们称之为“套接字”或“端点”。TCp协议是一种端对端的协议。使用TCp没有任何广播或类似的概念。TCP 通过面向连接的、端到端的可靠数据报发送来保证可靠性。TCP 在字节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。如果在规定时间内,没有收到关于这个包的确认响应,重新发送此包。TCP 的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测丢失包并请求重发。要用TCp协议与另一台计算机通信,两台机之间必须像打电话一样连接在一起,每一端都都为通话做好准备。“流传输”(Stream delivery)是谈到TCp时的另一个常用词语。这个短语的含义是TCp协议主要用来处理数据流,可以正确处理乱序的数据包。TCp协议甚至还允许存在丢失的或者损坏的数据包,最终它可以再次得到这些数据包。你很可能听一位程序员在谈论“流”的概念。他指的是这样一个事实:数据到底是在什么时候发送的是很难说清楚的,你也可以在TCp流中发送非结构化数据。TCp协议以它自己的方式缓存数据。不过,其缓存过程对程序员和用户是透明的。 关于流数据传输 ,TCP 交付一个由序列号定义的无结构的字节流。 这个服务对应用程序有利,因为在送出到 TCP 之前应用程序不需要将数据划分成块, TCP 可以将字节整合成字段,然后传给 IP 进行发送。TCp协议每发送一个数据包将会收到一个确认信息。这种发送/应答模式是提供可靠的协议的唯一方法:你必须让对方知道你否收到了数据。当然,这也会造成一些性能损失,而人们需要改善系统效率不高的状况。所以引入了“捎带确认(piggybacking ACKs)”的方法。TCp协议之所以是全双工的就是因为这个“捎带确认”信息,因为它允许双方同时发送数据。这是通过在当前的数据包中携带以前收到的数据的确认信息方式实现的。从提高网络利用率的角度看,这比单纯发送一个通知对方“信息已收到”的数据包要好得多。最后,还有一个批量确认的概念:也即一次确认一个以上的数据包,表示“我收到了包括这个数据包在内的全部数据包”。在Ip协议中,我们处理的单个数据包是一个更大的数据报的一部分。请记住,一个TCp段就是一个单个的TCp数据包。TCp是一个数据流,因此,除了“连接”之外,没有任何需要真正担心的其它概念。最大报文段长度(MSS)是在连接的时候协商的,但是,它总是在不断地改变。默认的最大报文段长度是536字节,这是576字节(Ip协议保证的最小数据包长度)减去用于Ip头的20个字节和用于TCp头的20个字节以后的长度。TCp协议要设法避免在Ip级别上的分段。因此,TCp协议总是从536字节开始的。TCp协议最有魅力的功能仍然保留着。这就是滑动窗口协议。这个窗口实际上是已经发出的“没有签收确认的”数据总数。这个窗口可以根据意愿放大和缩小。这是很有趣的。下一讲将介绍这方面的内容。一个TCp数据包的头是20个字节,就像一个Ip数据包一样。如果使用一些选项,Ip和TCp数据包头都可以放大。TCp头不包含Ip地址,它仅需要知道要连接哪一个端口。不过,你不要被这弄晕了。TCp工作时要一直跟踪状态表中的端对端的连接。这个状态表包含Ip地址和端口。这就是说,只是TCp头不需要Ip信息,因为它来自于Ip头。把一个数据包设想为一个字节跟着一个字节的数据流是很容易的。很多人都想要一个显示TCp头的表格。但是,这常会把事情搞乱。TCp头从第一位开始依次是下面这些内容:�6�1源端口,16位:用于这次连接的本地TCp端口。�6�1目的地端口,16位:通讯目标机器的TCp端口。�6�1序列号,32位:用来跟踪数据包顺序的号码。�6�1确认编号,32位:我们确认的以前收到的序列号。�6�1头长度,4位:报头中的32位字(words)的数量。如果不使用选项,这个值设定为5。�6�1保留,6位:为将来的使用保留的字节。�6�1标记,一共6位:每一个标记一个字节(开或者关)-URG:紧急字段指针。-ACK:本数据包是(或者包含)一个确认信息。-pSH:推送功能(没有使用)。-RST:重置,或者中断本次连接。-SYN:同步数据包,也就是开始连接。-FIN:最后一个数据包,开始挂断序列。�6�1窗口尺寸,16位:从接收方将收到的确认字段开始。�6�1校验和,16位:TCp头和数据的校验和。�6�1应急指针,16位:指向跟在URG数据后面的数据的序列号的偏移值。�6�1选项:MSS、窗口比例等等。我们在关于TCp协议的下一讲中将重点介绍这个部分。 TCp连接的两端使用两对Ip地址和端口识别这个连接,并且向监听这个端口的应用程序发送数据。
      socket通讯实际是进程通讯,区别只是在不同机器而已,一个数据包到达一台设备上以后需要知道是哪个进程的收发的,端口号就告诉你数据包该给哪个进程
      数据段的 TCP 报头中为什么包含端口号?

      tcp通信中怎么获得客户端的端口号?

      TCP端口就是为TCP协议通信提供服务的端口。TCP (Transmission Control Protocol) ,TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在计算机网络OSI模型中,它完成第四层传输层所指定的功能,我们的电脑与网络连接的许多应用都是通过TCP端口实现的。获取端口号为两种,分别如下: 一、静态端口获取TCP 0= ReservedTCP 1=TCP Port Service MultiplexerTCP 2=DeathTCP 5=Remote Job Entry,yoyoTCP 7=EchoTCP 11=SkunTCP 12=BomberTCP 16=SkunTCP 17=SkunTCP 18=消息传输协议,skunTCP 19=SkunTCP 20=FTP Data,AmandaTCP 21=文件传输,Back Construction,Blade Runner,Doly Trojan,Fore,FTP trojan,Invisible FTP,Larva, WebEx,WinCrashTCP 22=远程登录协议TCP 23=远程登录(Telnet),Tiny Telnet Server (= TTS)TCP 25=电子邮件(SMTP),Ajan,Antigen,Email Password Sender,Happy 99,Kuang2,ProMail trojan,Shtrilitz,Stealth,Tapiras,Terminator,WinPC,WinSpy,Haebu CocedaTCP 27=AssasinTCP 28=AmandaTCP 29=MSG ICPTCP 30=Agent 40421TCP 31=Agent 31,Hackers Paradise,Masters Paradise,Agent 40421TCP 37=Time,ADM wormTCP 39=SubSARITCP 41=DeepThroat,ForeplayTCP 42=Host Name ServerTCP 43=WHOISTCP 44=ArcticTCP 48=DRATTCP 49=主机登录协议TCP 50=DRATTCP 51=IMP Logical Address Maintenance,Fuck Lamers BackdoorTCP 52=MuSka52,SkunTCP 53=DNS,Bonk (DOS Exploit)TCP 54=MuSka52TCP 58=DMSetupTCP 59=DMSetupTCP 63=whois++TCP 64=Communications IntegratorTCP 65=TACACS-Database ServiceTCP 66=Oracle SQL*NET,AL-BarekiTCP 67=Bootstrap Protocol ServerTCP 68=Bootstrap Protocol ClientTCP 69=W32.Evala.Worm,BackGate Kit,Nimda,Pasana,Storm,Storm worm,Theef,Worm.Cycle.aTCP 70=Gopher服务,ADM wormTCP 79=用户查询(Finger),Firehotcker,ADM wormTCP 80=超文本服务器(Http),Executor,RingZeroTCP 81=Chubo,Worm.Bbeagle.qTCP 82=Netsky-ZTCP 88=Kerberos krb5服务TCP 99=Hidden PortTCP 102=消息传输代理TCP 108=SNA网关访问服务器TCP 109=Pop2TCP 110=电子邮件(Pop3),ProMailTCP 113=Kazimas, Auther IdnetTCP 115=简单文件传输协议TCP 118=SQL Services, Infector 1.4.2TCP 119=新闻组传输协议(Newsgroup(Nntp)), Happy 99TCP 121=JammerKiller, Bo jammerkillahUDP 123=网络时间协议(NTP),Net ControllerTCP 129=Password Generator ProtocolTCP 133=Infector 1.xTCP 135=微软DCE RPC end-point mapper服务TCP 137=微软Netbios Name服务(网上邻居传输文件使用)TCP 138=微软Netbios Name服务(网上邻居传输文件使用)TCP 139=微软Netbios Name服务(用于文件及打印机共享)TCP 142=NetTaxiTCP 143=IMAPTCP 146=FC Infector,InfectorTCP 150=NetBIOS Session ServiceTCP 156=SQL服务器TCP 161=SnmpTCP 162=Snmp-TrapTCP 170=A-TrojanTCP 177=X Display管理控制协议TCP 179=Border网关协议(BGP)TCP 190=网关访问控制协议(GACP)TCP 194=IrcTCP 197=目录定位服务(DLS)TCP 256=NirvanaTCP 315=The InvasorTCP 371=ClearCase版本管理软件TCP 389=Lightweight Directory Access Protocol (LDAP)TCP 396=Novell Netware over IPTCP 420=BreachTCP 421=TCP WrappersTCP 443=安全服务TCP 444=Simple Network Paging Protocol(SNPP)TCP 445=Microsoft-DSTCP 455=Fatal ConnectionsTCP 456=Hackers paradise,FuseSparkTCP 458=苹果公司QuickTimeTCP 513=GrloginTCP 514=RPC BackdoorTCP 520=EFS (UDP520=RIP)TCP 531=Rasmin,Net666TCP 544=kerberos kshellTCP 546=DHCP ClientTCP 547=DHCP ServerTCP 548=Macintosh文件服务TCP 555=Ini-Killer,Phase Zero,Stealth SpyTCP 569=MSNTCP 605=SecretServiceTCP 606=Noknok8TCP 660=DeepThroatTCP 661=Noknok8TCP 666=Attack FTP,Satanz Backdoor,Back Construction,Dark Connection Inside 1.2TCP 667=Noknok7.2TCP 668=Noknok6TCP 669=DP trojanTCP 692=GayOLTCP 707=Welchia,nachiTCP 777=AIM SpyTCP 808=RemoteControl,WinHoleTCP 815=Everyone DarlingTCP 901=Backdoor.DevilTCP 911=Dark ShadowTCP 990=ssl加密TCP 993=IMAPTCP 999=DeepThroatTCP 1000=Der SpaeherTCP 1001=Silencer,WebEx,Der SpaeherTCP 1003=BackDoorTCP 1010=DolyTCP 1011=DolyTCP 1012=DolyTCP 1015=DolyTCP 1016=DolyTCP 1020=VampireTCP 1023=Worm.Sasser.eTCP 1024=NetSpy.698(YAI)2二、动态端口获取TCP 1059=nimregTCP 1025=NetSpy.698,Unused Windows Services BlockTCP 1026=Unused Windows Services BlockTCP 1027=Unused Windows Services BlockTCP 1028=Unused Windows Services BlockTCP 1029=Unused Windows Services BlockTCP 1030=Unused Windows Services BlockTCP 1033=NetspyTCP 1035=MultidropperTCP 1042=BlaTCP 1045=RasminTCP 1047=GateCrasherTCP 1050=MiniCommandTCP 1069=Backdoor.TheefServer.202TCP 1070=Voice,Psyber Stream Server,Streaming Audio TrojanTCP 1080=Wingate,Worm.BugBear.B,Worm.Novarg.BTCP 1090=Xtreme, VDOLiveTCP 1092=LoveGateTCP 1095=RatTCP 1097=RatTCP 1098=RatTCP 1099=RatTCP 1110=nfsd-keepaliveTCP 1111=Backdoor.AIMVisionTCP 1155=Network File AccessTCP 1170=Psyber Stream Server,Streaming Audio trojan,VoiceTCP 1200=NoBackOTCP 1201=NoBackOTCP 1207=SoftwarTCP 1212=Nirvana,Visul KillerTCP 1234=UltorsTCP 1243=BackDoor-G, SubSeven, SubSeven ApocalypseTCP 1245=VooDoo DollTCP 1269=Mavericks MatrixTCP 1313=NirvanaTCP 1349=BioNetTCP 1433=Microsoft SQL服务TCP 1441=Remote StormTCP 1492=FTP99CMP(BackOriffice.FTP)TCP 1503=NetMeeting T.120TCP 1509=Psyber Streaming ServerTCP 1600=Shivka-BurkaTCP 1703=Exloiter 1.1TCP 1720=NetMeeting H.233 call SetupTCP 1731=NetMeeting音频调用控制TCP 1807=SpySenderTCP 1966=Fake FTP 2000TCP 1976=Custom portTCP 1981=ShockraveTCP 1990=stun-p1 cisco STUN Priority 1 portTCP 1990=stun-p1 cisco STUN Priority 1 portTCP 1991=stun-p2 cisco STUN Priority 2 portTCP 1992=stun-p3 cisco STUN Priority 3 port,ipsendmsg IPsendmsgTCP 1993=snmp-tcp-port cisco SNMP TCP portTCP 1994=stun-port cisco serial tunnel portTCP 1995=perf-port cisco perf portTCP 1996=tr-rsrb-port cisco Remote SRB portTCP 1997=gdp-port cisco Gateway Discovery ProtocolTCP 1998=x25-svc-port cisco X.25 service (XOT)TCP 1999=BackDoor, TransScoutTCP 2000=Der Spaeher,INsane NetworkTCP 2002=W32.Beagle. AX mmTCP 2001=Transmisson scoutTCP 2002=Transmisson scoutTCP 2003=Transmisson scoutTCP 2004=Transmisson scoutTCP 2005=TTransmisson scoutTCP 2011=cypressTCP 2015=raid-csTCP 2023=Ripper,Pass Ripper,Hack City Ripper ProTCP 2049=NFSTCP 2115=BugsTCP 2121=NirvanaTCP 2140=Deep Throat, The InvasorTCP 2155=NirvanaTCP 2208=RuXTCP 2255=Illusion MailerTCP 2283=HVL Rat5TCP 2300=PC ExplorerTCP 2311=Studio54TCP 2556=Worm.Bbeagle.qTCP 2565=StrikerTCP 3210=SchoolBusTCP 3332=Worm.Cycle.aTCP 3333=ProsiakTCP 3389=超级终端TCP 3456=TerrorTCP 3459=Eclipse 2000TCP 3700=Portal of DoomTCP 4500=W32.HLLW.TufasTCP 5190=ICQ QueryTCP 5321=FirehotckerTCP 5333=Backage Trojan Box 3TCP 5343=WCratTCP 5400=Blade Runner, BackConstruction1.2TCP 5401=Blade Runner,Back ConstructionTCP 5402=Blade Runner,Back ConstructionTCP 5471=WinCrashTCP 5512=Illusion MailerTCP 5521=Illusion MailerTCP 5550=Xtcp,INsane NetworkTCP 5554=Worm.SasserTCP 5555=ServeMeTCP 5556=BO FacilTCP 5557=BO FacilTCP 5569=Robo-HackTCP 5598=BackDoor 2.03TCP 5631=PCAnyWhere dataTCP 5632=PCAnyWhereTCP 5637=PC CrasherTCP 5638=PC CrasherTCP 5698=BackDoorTCP 5714=Wincrash3TCP 5741=WinCrash3TCP 5742=WinCrashTCP 5760=Portmap Remote Root Linux ExploitTCP 5880=Y3K RATTCP 5881=Y3K RATTCP 5882=Y3K RATTCP 5888=Y3K RATTCP 5889=Y3K RATTCP 5900=WinVncTCP 6000=Backdoor.ABTCP 6006=Noknok8TCP 6129=Dameware Nt Utilities服务器TCP 6272=SecretServiceTCP 6267=广外女生TCP 6400=Backdoor.AB,The ThingTCP 6500=Devil 1.03TCP 6661=TemanTCP 6666=TCPshell.cTCP 6667=NT Remote Control,Wise 播放器接收端口TCP 6668=Wise Video广播端口TCP 6669=VampyreTCP 6670=DeepThroat,iPhoneTCP 6671=Deep Throat 3.0TCP 6711=SubSevenTCP 6712=SubSeven1.xTCP 6713=SubSevenTCP 6723=MstreamTCP 6767=NT Remote ControlTCP 6771=DeepThroatTCP 6776=BackDoor-G,SubSeven,2000 CracksTCP 6777=Worm.BBeagleTCP 6789=Doly TrojanTCP 6838=MstreamTCP 6883=DeltaSourceTCP 6912=Shit HeepTCP 6939=IndoctrinationTCP 6969=GateCrasher, Priority, IRC 3TCP 6970=RealAudio,GateCrasherTCP 7000=Remote Grab,NetMonitor,SubSeven1.xTCP 7001=Freak88TCP 7201=NetMonitorTCP 7215=BackDoor-G, SubSevenTCP 7001=Freak88,Freak2kTCP 7300=NetMonitorTCP 7301=NetMonitorTCP 7306=NetMonitor,NetSpy 1.0TCP 7307=NetMonitor, ProcSpyTCP 7308=NetMonitor, X SpyTCP 7323=Sygate服务器端TCP 7424=Host ControlTCP 7511=聪明基因TCP 7597=QazTCP 7609=Snid X2TCP 7626=冰河TCP 7777=The ThingTCP 7789=Back Door Setup, ICQKillerTCP 7983=MstreamTCP 8000=腾讯OICQ服务器端,XDMATCP 8010=Wingate,LogfileTCP 8011=WAY2.4TCP 8080=WWW 代理,Ring Zero,Chubo,Worm.Novarg.BTCP 8102=网络神偷TCP 8181=W32.Erkez.DmmTCP 8520=W32.Socay.WormTCP 8594=I-Worm/Bozori.aTCP 8787=BackOfrice 2000TCP 8888=WinvncTCP 8897=Hack Office,ArmageddonTCP 8989=ReconTCP 9000=NetministratorTCP 9325=MstreamTCP 9400=InCommand 1.0TCP 9401=InCommand 1.0TCP 9402=InCommand 1.0TCP 9872=Portal of DoomTCP 9873=Portal of DoomTCP 9874=Portal of DoomTCP 9875=Portal of DoomTCP 9876=Cyber AttackerTCP 9878=TransScoutTCP 9989=Ini-KillerTCP 9898=Worm.Win32.Dabber.aTCP 9999=Prayer TrojanTCP 10000=webmin管理端口TCP 10067=Portal of DoomTCP 10080=Worm.Novarg.BTCP 10084=SyphillisTCP 10085=SyphillisTCP 10086=SyphillisTCP 10101=BrainSpyTCP 10167=Portal Of DoomTCP 10168=Worm.Supnot.78858.c,Worm.LovGate.TTCP 10520=Acid ShiversTCP 10607=Coma trojanTCP 10666=AmbushTCP 11000=Senna SpyTCP 11050=Host ControlTCP 11051=Host ControlTCP 11223=Progenic,Hack ’99KeyLoggerTCP 11831=TROJ_LATINUS.SVRTCP 12076=Gjamer, MSH.104bTCP 12223=Hack’99 KeyLoggerTCP 12345=GabanBus, NetBus 1.6/1.7, Pie Bill Gates, X-billTCP 12346=GabanBus, NetBus 1.6/1.7, X-billTCP 12349=BioNetTCP 12361=Whack-a-moleTCP 12362=Whack-a-moleTCP 12363=Whack-a-moleTCP 12378=W32/GibeMTCP 12456=NetBusTCP 12623=DUN ControlTCP 12624=ButtmanTCP 12631=WhackJob, WhackJob.NB1.7TCP 12701=Eclipse2000TCP 12754=MstreamTCP 13000=Senna SpyTCP 13010=Hacker BrazilTCP 13013=PsychwardTCP 13223=Tribal Voice的聊天程序PowWowTCP 13700=Kuang2 The VirusTCP 14456=SoleroTCP 14500=PC InvaderTCP 14501=PC InvaderTCP 14502=PC InvaderTCP 14503=PC InvaderTCP 15000=NetDaemon 1.0TCP 15092=Host Control TCP 15104=Mstream
      在连接建立以后 getsockname可取得本地的连接信息.包括端口号.
      tcp通信中怎么获得客户端的端口号?

      TCP-IP详解卷1:协议读书笔记_11

      UDP是一个简单的面向数据报的传输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。 UDP数据报封装成一份IP数据报的格式如下图:UTP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。应用程序必须注意IP数据报的长度。如果它超过网络MTU(最大传输单元),那么就要对IP数据报进行分片。如果需要源端到目的端的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。首部结构如下图:端口号表示发送进程和接受进程,由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是OK的)。这个UDP长度是有冗余的,IP数据报长度指的是数据报全长,因此UDP数据报长度等于IP数据报长度减去IP首部的长度。UDP校验和覆盖UDP首部和UDP数据。回想IP首部的校验和,它只覆盖IP的首部----并不覆盖IP数据报的任何数据。UDP和TCP在首部都有覆盖它们首部和数据的校验和。UDP校验和是可选的,而TCP的校验和是必需的。尽管U D P检验和的基本计算方法与我们之前第三节中描述的IP首部检验和计算方法相类似(16bit字的二进制反码和),但是它们之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是检验和算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)。UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。把一份IP数据报进行分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在下一站就进行重新组装,而不是在最终目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对传输层(TCP和UDP)是透明的。已经分片过得数据报可能会再次进行分片,IP首部中包含的数据为分片和重新组装提供了足够的信息。对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。标志字段其中一个比特来表示"更多的片"。除了最后一片外,其他每个组成数据报的片都要把比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。最后,标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报(“需要进行分片但设置了不分片比特”)给起始端。当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。IP分片有一个问题:丢失掉一片数据也要重新传输整个数据报。原因:IP层没有超时重传机制---由更高层负责超时和重传。当来自TCP报文段的某一片丢失后,TCP超时会重发整个TCP报文段,该报文段对应于一份IP数据报。没有办法重传数据报中的一个数据报片。使用UDP很容易导致IP分片。下图是UDP分片示例:发现ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。如果某个程序需要判断到达目的端的路途中最小MTU是多少----称作路径MTU发现机制,那么这个差错就可以被该程序使用。这个情况下ICMP不可达差错报文格式如下图:如果路由器没有提供这种新的ICMP差错报文格式,那么下一站的MTU就为0。理论上,IP数据报的最大长度是65535字节,这是由IP首部16比特总长度字段所限制的。去除20字节的IP首部和8个字节的UDP首部,UDP数据报中用户数据的最长长度为65507字节。但是,大多数实现所提供的长度比这个最大值小。其中有两个限制因素:1.应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。2.第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),是IP数据报长度小于65535字节。我们同样可以使用UDP缠上ICMP"源站抑制"差错。当一个系统(路由器或主机)接受数据报的速度比其处理速度快时,可能产生这个差错。当在以太网传播的数据需要经过SLIP链路时,可能产生该差错报文。因为SLIP链路的速度大约只有以太网的千分之一,所以,很容易使其缓存用完。在本例中,应用程序要么没有接收到源站抑制差错信号,要么接收到却将其忽略了。结果是如果采用UDP协议,那么BSD实现通常忽略其接收到的源站抑制报文。其部分原因在于,在接收到源站抑制差错报文时,导致源站抑制的进程可能已经中止了。不处理ICMP源站抑制差错,说明了UDP是一个非可靠的协议,它只控制端到端的流量控制。除非在应用程序中建立一些应答机制,否则发送端并不知道接收端是否收到了这些数据。来自客户的是UDP数据报。IP首部包含源端和目的端IP地址,UDP首部包含了源端和目的端的UDP端口号。当一个应用程序接收到UDP数据报时,操作系统必须告诉它是谁发送了这份消息,即源IP地址和端口号。这个特性允许一个交互UDP服务器对多个客户进行处理。给每个发送请求的客户发回应答。一些应用程序需要知道数据报是发给谁的,即目的地址。这要求操作系统从接收到的UDP数据报中将目的IP地址交给应用程序。大多数UDP服务器是交互服务器,单个服务器进程对单个UDP端口上的所有客户请求进行处理。通常程序所使用的每个UDP端口都与一个有限大小的输入队列向联系。这意味着,来自不同客户的差不多同时到达的请求将有UDP自动排队。接收到UDP数据报以其接收顺序交给应用程序。因此,由于队列溢出导致的UDP数据报的丢失不可避免。应用程序不知道其输入队列什么时候会溢出,只能有UDP对超出数据报进行丢弃处理。同时,不会发挥任何消息告诉客户其数据报被丢弃。大多数UDP服务器在创建UDP端点时都使其本地IP地址具有通配符的特点。这表明进入的UFP数据报如果其目的地为服务端端口,那么任何本地接口均可接收到它。大多数系统允许UDP端点对远端地址进行限制。下面是UDP服务器本身可以创建的三类地址绑定:在所有情况下,lport指的是服务器有名端口号,localIP必须是本地接口的IP地址。表中这三行的排序是UDP模块在判断用哪个端点接收数据报时所采用的顺序。最为确定的地址(第一行)首先被匹配,最不确定的地址(最后一行IP地址带有两个星号)最后进行匹配。当UDP数据报到达的目的IP地址为广播地址或多播地址,而且在目的IP地址和端口号处有多个端点时,就向每个端点传送一份数据报的复制(端点的本地IP地址可以含有星号,它可匹配任何目的IP地址)。但是,如果UDP数据报到达的是一个单播地址,那么只向其中一个端点传送一份数据报的复制。选择哪个端点传送数据取决于各个不同的系统实现。UDP是一个简单协议。它想用户进程提供的服务位于IP层之上,包括端口号和可选的校验和,我们用UDP老检查校验和并观察分片是如何进行的。 当系统接收IP数据报的速率超过这些数据报被处理的速率时,系统可能发送ICMP源站抑制差错报文。使用UDP时很容易产生这样的ICMP差错。
      TCP-IP详解卷1:协议读书笔记_11

      tcp,udp 的协议端口如何实现

      TCP 和 UDP 都是 IP 层的传输协议,是 IP 与上层之间的处理接口。TCP 和 UDP 协议端口号被设计来区分运行在单个设备上的多重应用程序的 IP 地址。+---------+--------------+--------------+-----------------------------------+|MAC      | IP           | TCP/UDP      |    Data                           |+---------+--------------+--------------+-----------------------------------+基本情况就是上述帧格式:五元组分别位于MAC, IP, TCP/UDP里面:MAC里面的type决定了是否是IP帧,IP里面给出了SrcIp和DestIp,TCP、UDP头给出了到底是那种传输层协议。绑定bind主要用于服务,而客户端一般采用连接connect。 其过程就像启动一个服务,然后绑定到一个特定端口,对该端口所有进来的tcp/udp请求进行响应。一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。当一个连接请求过来的时候,服务端调用accept函数,新生成一个socket,这个socket所占用的本地端口依然是80端口。由四元组就很容易分析到了,同一个(src_ip,src_port),它所对应的(dst_ip,dst_port)可以无穷变化,这样就可以建立很多个客户端的请求了。UDP的connect函数,给udp进行了链接,那么udp的异步错误是不会返回到udp套接字的。般情况下,不connect的udp是不知道对面有没有错的,如果有错,那真的是晕啊。因为万一对面服务挂了,客户端一直都不知道,一直等到死。再次调用connect有2个目的:1.指定新的ip和端口 (指定新的即可)2.断开套接字 (family成员设置为AF_UNSPEC:sin_family,sin6_family)对于tcp来说,connect只能调用一次,万万不可调用2次。TCP层为连接状态的维持保留有一段时间,在这段时间内连接状态没有被修改之前是不允许重复connect的。TCP的有一个种2MSL等待时间。udp在发送数据的时候才知道链接不上,而tcp还没有发送数据的时候,就已经知道链接不上鸟udp缺乏流量控制,udp发送端淹没接收端是轻而易举的事情。因套接字满而丢弃鸟。高级udp编程时再讲解如何给udp程序增加一些可靠性。
      不管TCP还是UDP,都含有网络服务必须的源端口和目的端口信息,以建立和实现网络传输服务。这时,你的疑问就来了:既然都用于传输,为何要搞两个不同的协议呢?这就需要从网络中不同服务的需求来谈起。 在网络中,有些服务,如HTTP、FTP等,对数据的可靠性要求较高,在使用这些服务时,必须保证数据包能够完整无误的送达;而另外一些服务,如DNS、即时聊天工具等,并不需要这么高的可靠性,高效率和实时性才是它们所关心的。根据这两种服务不同的需求,也就诞生了面向连接的TCP协议,以及面向无连接的UDP协议。这里的连接(Connection)和无连接(Connectionless)是网络传输中常用的术语,它们的关系可以用一个形象地比喻来说明,就是打电话和写信。打电话时,一个人首先必须拨号(发出连接请求),等待对方响应,接听电话(建立了连接)后,才能够相互传递信息。通话完成后,还需要挂断电话(断开连接),才算完成了整个通话过程。写信则不同,你只需填写好收信人的地址信息,然后将信投入邮局,就算完成了任务。此时,邮局会根据收信人的地址信息,将信件送达指定目的地。我们可以看到,这两者之间有很大不同。打电话时,通话双方必须建立一个连接,才能够传递信息。连接也保证了信息传递的可靠性,因此,面向连接的协议必然是可靠的。无连接就没有这么多讲究,它不管对方是否有响应,是否有回馈,只管将信息发送出去。就像信件一旦进了邮箱,在它到达目的地之前,你没法追踪这封信的下落;接收者即使收到了信件,也不会通知你信件何时到达。在整个通讯过程中,没有任何保障。因此我们常说,面向无连接的协议也是不可靠的。当然,邮局会尽力将右键送到目的地,99%的情况信件会安全到达,但在少数情况下也有例外。 面向连接的协议比面向无连接的协议在可靠性上有着显著的优势,但建立连接前必须等待接收方响应,传输信息过程中必须确认信息是否传到,断开连接时需要发出响应信号等,无形中加大了面向连接协议的资源开销。具体到TCP和UDP协议来说,除了源端口和目的端口,TCP还包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息,UDP则只包含长度和校验和信息。UDP数据报比TCP小许多,这意味着更小的负载和更有效的使用带宽。许多即时聊天软件采用UDP协议,与此有莫大的关系。
      tcp和udp传送协议是微软公司和操作系统开发时一起定义好了的,重要的端口已经在dll动态链接库文件和API函数文件里面定义好了的。1-9999的端口大部分都是系统定义好了的。因为操作系统的微软公司的。比如445,135,139,21,22,80,3389,4899,25,端口号都是人家在操作系统内核编程的时候早就定义好了的,1-9999以下通用的端口号是大家约定俗成。文件传输一般用TCP协议,QQ数据一般用UDP,端口号一般在10000以上,程序sokt套接字里面设定,当然在三层交换机,路由器上面也要设置。我说的可不是普通家庭的,是思科的大型交换机,路由器。那里面也要设置端口。
      不管TCP还是UDP,都含有网络服务必须的源端口和目的端口信息,以建立和实现网络传输服务。这时,你的疑问就来了:既然都用于传输,为何要搞两个不同的协议呢?这就需要从网络中不同服务的需求来谈起。 在网络中,有些服务,如HTTP、FTP等,对数据的可靠性要求较高,在使用这些服务时,必须保证数据包能够完整无误的送达;而另外一些服务,如DNS、即时聊天工具等,并不需要这么高的可靠性,高效率和实时性才是它们所关心的。根据这两种服务不同的需求,也就诞生了面向连接的TCP协议,以及面向无连接的UDP协议。这里的连接(Connection)和无连接(Connectionless)是网络传输中常用的术语,它们的关系可以用一个形象地比喻来说明,就是打电话和写信。打电话时,一个人首先必须拨号(发出连接请求),等待对方响应,接听电话(建立了连接)后,才能够相互传递信息。通话完成后,还需要挂断电话(断开连接),才算完成了整个通话过程。写信则不同,你只需填写好收信人的地址信息,然后将信投入邮局,就算完成了任务。此时,邮局会根据收信人的地址信息,将信件送达指定目的地。我们可以看到,这两者之间有很大不同。打电话时,通话双方必须建立一个连接,才能够传递信息。连接也保证了信息传递的可靠性,因此,面向连接的协议必然是可靠的。无连接就没有这么多讲究,它不管对方是否有响应,是否有回馈,只管将信息发送出去。就像信件一旦进了邮箱,在它到达目的地之前,你没法追踪这封信的下落;接收者即使收到了信件,也不会通知你信件何时到达。在整个通讯过程中,没有任何保障。因此我们常说,面向无连接的协议也是不可靠的。当然,邮局会尽力将右键送到目的地,99%的情况信件会安全到达,但在少数情况下也有例外。 面向连接的协议比面向无连接的协议在可靠性上有着显著的优势,但建立连接前必须等待接收方响应,传输信息过程中必须确认信息是否传到,断开连接时需要发出响应信号等,无形中加大了面向连接协议的资源开销。具体到TCP和UDP协议来说,除了源端口和目的端口,TCP还包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息,UDP则只包含长度和校验和信息。UDP数据报比TCP小许多,这意味着更小的负载和更有效的使用带宽。许多即时聊天软件采用UDP协议,与此有莫大的关系。
      tcp,udp 的协议端口如何实现

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类