﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-月落垟</title><link>http://www.cppblog.com/sumflowers/</link><description>You got a dream,you have to pretend it</description><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 11:43:16 GMT</lastBuildDate><pubDate>Tue, 21 Apr 2026 11:43:16 GMT</pubDate><ttl>60</ttl><item><title>TCP/IP概括</title><link>http://www.cppblog.com/sumflowers/archive/2010/06/03/117090.html</link><dc:creator>小修</dc:creator><author>小修</author><pubDate>Thu, 03 Jun 2010 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/sumflowers/archive/2010/06/03/117090.html</guid><wfw:comment>http://www.cppblog.com/sumflowers/comments/117090.html</wfw:comment><comments>http://www.cppblog.com/sumflowers/archive/2010/06/03/117090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sumflowers/comments/commentRss/117090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sumflowers/services/trackbacks/117090.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br><strong>一、TCP/IP介绍</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP/IP协议(Transfer Controln Protocol/Internet Protocol)叫做传输控制/网际协议，又叫网络通讯协议，这个协议是Internet国际互联网络的基础。<br><br>TCP/IP由四个层次组成：网络接口层（链路层）、网间网层（网络层）、传输层（运输层）、应用层。<br>&nbsp;&nbsp;&nbsp;&nbsp;网络接口层：这是TCP/IP软件的最低层，负责接收IP数据报并通过网络发送之，或者从网络上接收物理帧，抽出IP数据报，交给IP层。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;网间网层：负责相邻计算机之间的通信。其功能包括三方面。一、处理来自传输层的分组发送请求，收到请求后，将分组装入IP数据报，填充报头，选择去往信宿机的路径，然后将数据报发往适当的网络接口。二、处理输入数据报：首先检查其合法性，然后进行寻径--假如该数据报已到达信宿机，则去掉报头，将剩下部分交给适当的传输协议；假如该数据报尚未到达信宿，则转发该数据报。三、处理路径、流控、拥塞等问题。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;传输层：提供应用程序间的通信。其功能包括：一、格式化信息流；二、提供可靠传输。为实现后者，传输层协议规定接收端必须发回确认，并且假如分组丢失，必须重新发送。</p>
<p dir=ltr style="FONT-SIZE: 12pt; MARGIN-RIGHT: 0px; FONT-FAMILY: 宋体" align=left>&nbsp;&nbsp;&nbsp;&nbsp;应用层：向用户提供一组常用的应用程序，比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。<br><br><img height=411 alt="" src="http://www.cppblog.com/images/cppblog_com/sumflowers/tcpip.gif" width=415 border=0><br><br><br>ARP(Address Resolation Protocol) 地址解析协议<br>RARP(Reverse Address Resolution Protocol)反向地址转换协议<br>IP(Internetworking Protocol) 网间网协议<br>ICMP(Internet Control Message Protocol) 互联网控制信息协议<br>IGMP(Internet Group Management Protocol)Internet 组管理协议<br>TCP(Transport Control Protocol) 传输控制协议<br>UDP(User Datagram Protocol) 用户数据报协议<br>SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议<br>SNMP(Simple Network manage Protocol) 简单网络管理协议<br>FTP(File Transfer Protocol) 文件传输协议</p>
<p dir=ltr style="FONT-SIZE: 12pt; MARGIN-RIGHT: 0px; FONT-FAMILY: 宋体" align=left><strong>二、TCP、UDP协议<br></strong>&nbsp;&nbsp;&nbsp;TCP：传输控制协议，面向连接、可靠的字节流、提供流量控制、全双工的数据传输服务。<br>&nbsp;&nbsp;&nbsp;UDP：用户数据协议，无连接、简单的、不可靠、定长数据包。<br><br><strong>三、TCP连接的建立与终止<br></strong>&nbsp;&nbsp;&nbsp;TCP连接的建立（三路握手）<br>1. 服务器必须准备好接受外来的连接。这通过调用 socket、bind 和 listen 函数来完成，称为被动打开（passive open）。<br>2. 客户通过调用 connect 进行主动打开（active open）。这引起客户TCP发送一个SYN分节（表示同步），它告诉服务器客户将在（待建立的）连接中发送的数据的初始序列号。一般情况下SYN分节不携带数据，它只含有一个IP头部、一个TCP头部及可能有的TCP选项。<br>3. 服务器必须确认客户的SYN，同时自己也得发送一个SYN分节，它含有服务器将在统一连接中发送的数据的初始序列号。服务器一单个分节向客户发送SYN和对客户SYN的ACK。<br>4. 客户必须确认服务器的SYN。<br><br>&nbsp;&nbsp;&nbsp;TCP连接终止<br>1. 某个应用进程首先调用close，称这一端执行主动关闭（active close），这一端的TCP发送一个FIN分节，表示数据发送完毕。<br>2.&nbsp; 接收到FIN的另一端执行被动关闭（passive close）。这个FIN由TCP确认。它的接收也作为 文件结束符传递给接收方应用进程（放在已排队等候该应用进程接收的任何其他数据之后），应为FIN的接收意味着应用进程在相应连接上再也接收不到额外数据。<br>3. 一段时间后，接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的TCP也发送一个FIN。<br>4. 接收到这个FIN的原发送方TCP（即执行主动关闭的那一端）对它进行确认。<br><br><img height=457 alt="" src="http://www.cppblog.com/images/cppblog_com/sumflowers/tcp1.gif" width=474 border=0><br><br><strong>四、TCP状态转换图<br></strong><img height=480 alt="" src="http://www.cppblog.com/images/cppblog_com/sumflowers/tcp2.gif" width=397 border=0><br></p>
<img src ="http://www.cppblog.com/sumflowers/aggbug/117090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sumflowers/" target="_blank">小修</a> 2010-06-03 14:57 <a href="http://www.cppblog.com/sumflowers/archive/2010/06/03/117090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ｃ＋＋程序设计模型三种模型</title><link>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html</link><dc:creator>小修</dc:creator><author>小修</author><pubDate>Sat, 14 Feb 2009 16:16:00 GMT</pubDate><guid>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html</guid><wfw:comment>http://www.cppblog.com/sumflowers/comments/73822.html</wfw:comment><comments>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sumflowers/comments/commentRss/73822.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sumflowers/services/trackbacks/73822.html</trackback:ping><description><![CDATA[Ｃ＋＋程序设计模型直接支持三种 <strong>programming paradigms </strong>（程序设计典范）<br><br>１．程序模型（<strong>procedural model</strong>），就像C一样，Ｃ＋＋当然也支持它，字符串的处理就是一个例子，我们可以使用字符数组以及 str* 函数集（定义在标准的Ｃ函数库中）：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;boy[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Danny</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p_son;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>p_son&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[&nbsp;strlen&nbsp;(boy&nbsp;)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>strcpy(&nbsp;p_son,&nbsp;boy&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">strcmp(&nbsp;p_son,&nbsp;boy&nbsp;)&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;take_to_disneyland(&nbsp;boy&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>２．抽象数据类型模型（<strong>abstract data type model, ADT</strong>)。该模型所谓的&#8220;抽象&#8221;是和一组表达式（public 接口）一起提供，而其运算定义仍然隐而未明。例如下面的String class:<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">String&nbsp;girl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Anna</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>String&nbsp;daughter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;String::operator=();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">daughter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;girl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;String::operator==();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;girl&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;daughter&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;take_to_disneyland(&nbsp;girl&nbsp;);</span></div>
<br>３．面向对象模型（object-oriented model）。在此模型中有一些彼此相关的类型，通过一个抽象的 base class (用以提供共通接口）被封装起来。Library_materials class 就是一个例子，真正的 subtypes 例如 Book、Video、Compact_Disc、Puppet、Laptop 等等都可以从那里派生而来：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;check_in(&nbsp;Library_materials&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pmat&nbsp;)<br><img id=Codehighlighter1_41_175_Open_Image onclick="this.style.display='none'; Codehighlighter1_41_175_Open_Text.style.display='none'; Codehighlighter1_41_175_Closed_Image.style.display='inline'; Codehighlighter1_41_175_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_41_175_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_175_Closed_Text.style.display='none'; Codehighlighter1_41_175_Open_Image.style.display='inline'; Codehighlighter1_41_175_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_41_175_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_41_175_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">late()&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">fine();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">check_in();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;Lender&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">plend&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">reserved()&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">notify(&nbsp;plend&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/sumflowers/aggbug/73822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sumflowers/" target="_blank">小修</a> 2009-02-15 00:16 <a href="http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>