TCP - Transmission Control Protocol (TCP Connection Setup and Release)
Client Node Internet Server Node EventStudio System Designer 6
Client Net Server
Client App Network Server App 19-May-13 11:14 (Page 1)
This sequence diagram was generated with EventStudio System Designer (http://www.EventHelix.com/EventStudio).
TCP (Transmission Control Protocol) provides a reliable end to end service that delivers packets over the Internet. Packets are
delivered in sequence without loss or duplication.
This sequence diagram explores following: (1) The three-way handshake to establish a TCP (2) Data transfer using the byte
oriented sequence numbers (3) Release of a TCP connection.
The TCP socket creation and deletion on the server and client is also covered.
1. Socket initialization
1.1Server socket initialization
Server create Server Application creates a Socket (Closed state)
Socket
Closed State The Socket is created in Closed state
seq_num = 100 Initial Sequence Server sets the initial sequence number to 100
Passive_Open Server application has initiated a passive open. In this
Listens for TCP connectionmode, the socket does not attempt to establish a TCP
request from clients connection. The socket listens for TCP connection
(the socket does not attempt to establish a TCP
connection) request from clients
Listen State Socket transitions to the Listen state
Server awaits client socket connections.
1.2 Client socket initialization
create Client Client Application creates Socket
Socket
Closed State The socket is created in the Closed state
seq_num = 0 Initial Sequence Number Initial sequence number is set to 0
App opens a
socket for the connection
in active mode Active_Open Application wishes to communicate with a destination
TCP connection will be attempted with the server server using a TCP connection. The application opens a
socket for the connection in active mode. In this mode, a
TCP connection will be attempted with the server.
Typically, the client will use a well known port number to
communicate with the remote Server. For example,
HTTP uses port 80.
2. Client initiated three way handshake to establish a
TCP connection
SYN Client sets the SYN bit in the TCP header to request a
src = Client_Port, TCP connection. The sequence number field is set to 0.
dst = Server_Port, Since the SYN bit is set, this sequence number is used
seq_num = 0 as the initial sequence number
SYN Sent State Socket transitions to the SYN Sent state
TCP - Transmission Control Protocol (TCP Connection Setup and Release)
Client Node Internet Server Node
EventStudio System Designer 6
Client Net Server
Client App Client Socket Network Server Server App 19-May-13 11:14 (Page 2)
Socket
SYN SYN TCP segment is received by the server
src = Client_Port,
dst = Server_Port,
seq_num = 0
SYN+ACK Server sets the SYN and the ACK bits in the TCP
src = Server_Port, header. Server sends its initial sequence number as
dst = Client_Port, 100. Server also sets its window to 65535 bytes. i.e.
seq_num = 100, Server has buffer space for 65535 bytes of data. Also
ack_num = 1, note that the ack sequence numer is set to 1. This
window = 65535
signifies that the server expects a next byte sequence
number of 1
SYN Received State Now the server transitions to the SYN Received state
SYN+ACK Client receives the "SYN+ACK" TCP segment
src = Server_Port,
dst = Client_Port,
seq_num = 100,
ack_num = 1,
window = 65535
ACK Client now acknowledges the first segment, thus
src = Client_Port, completing the three way handshake. The receive
dst = Server_Port, window is set to 5000. Ack sequence number is set to
ack_num = 101, 101, this means that the next expected sequence
window = 5000 number is 101.
Established state At this point, the client assumes that the TCP connection
client assumes that the TCP connection has been established
has been established
ACK Server receives the TCP ACK segment
src = Client_Port,
dst = Server_Port,
ack_num = 101,
window = 5000
Established state Now the server too moves to the Established state
3. Data transfer phase: Here a short data transfer takes place, thus TCP
slow start has little impact
3.1 Client to server data transfer
Data Client application sends 1024 bytes of data to the socket
size = 1024
Split data into TCP This TCP connection limits TCP segments to 512 bytes,
segments thus the received data is split into 2 TCP segments
TCP Segment The first TCP segment is sent with a sequence number
seq_num = 1, of 1. This is the sequence number for the first byte in the
len = 512 segment.
(Note that unlike other protocols, TCP maintains
sequence numbers at byte level. The sequence number
field in the TCP header corresponds to the first byte in
the segment.)
TCP Segment Bytes in the first TCP segment correspond to 1 to 512
seq_num = 513, sequence numbers. Thus, the second TCP segment
len = 512 contains data starting with 513 sequence number
TCP - Transmission Control Protocol (TCP Connection Setup and Release)
Client Node Internet Server Node
EventStudio System Designer 6
Client Net Server
Client App Client Socket Network Server Server App 19-May-13 11:14 (Page 3)
Socket
TCP Segment
seq_num = 1,
len = 512
TCP Segment Server receives both the segments
seq_num = 513,
len = 512
Assemble TCP Segments Server receives two consecutive segments, thus it
assembles the segments
Data Assembled Data is passed to the Server Application
size = 1024
ACK Server acknowledges the data segments with the next
ack_num = 1025 expected sequence number as 1025 (TCP typically
sends an acknowledgement every two received
segments)
ACK
ack_num = 1025
3.2 Server to client data transfer
Data Now server responds back with data for the client
size = 700
Split data into TCP
segments
TCP Segment
seq_num = 101,
len = 512
TCP Segment
seq_num = 613,
len = 188
TCP Segment
seq_num = 1,
len = 512
TCP Segment Client has received both the TCP segments
seq_num = 613,
len = 188
Assemble TCP Segments
Data Socket passes data to Client application
size = 700
ACK Client sends a TCP ACK with the next expected
ack_num = 701 sequence number set to 701
ACK
ack_num = 701
TCP - Transmission Control Protocol (TCP Connection Setup and Release)
Client Node Internet Server Node
EventStudio System Designer 6
Client Net Server
Client App Client Socket Network Server Server App 19-May-13 11:14 (Page 4)
Socket
4. Client closes TCP connection
4.1 Client to server TCP connection release
Close Client application wishes to release the TCP connection
FIN Client sends a TCP segment with the FIN bit set in the
TCP header
FIN Wait 1 Client changes state to FIN Wait 1 state
FIN Server receives the FIN
ACK Server responds back with ACK to acknowledge the FIN
Close Wait Server changes state to Close Wait. In this state the
server waits for the server server waits for the server application to close the
application to close the connection
connection
ACK Client receives the ACK
FIN Wait 2 Client changes state to FIN Wait 2. In this state, the TCP
connection from the client to server is closed. Client now
waits close of TCP connection from the server end
4.2 Server to client TCP connection release
Close Server application closes the TCP connection
FIN FIN is sent out to the client to close the connection
Last Ack Server changes state to Last Ack. In this state the last
the last acknowledgement acknowledgement from the client will be received
from the client will be received
FIN Client receives FIN
ACK Client sends ACK
Close_Timer Client starts a timer to handle scenarios where the last
ack has been lost and server resends FIN
Time Wait Client waits in Time Wait state to handle a FIN retry
ACK Server receives the ACK
Closed Server moves the connection to closed state
delete
Close_Timer Close timer has expired. Thus the client end connection
can be closed too.
Closed
delete
This sequence diagram was generated with EventStudio System Designer (http://www.EventHelix.com/EventStudio).