본문 바로가기
Computer Science/컴퓨터 네트워크

컴퓨터 네트워크: A TCP Connection

by 청량리 물냉면 2021. 9. 24.
반응형

TCP: Transmission Control Protocol

 

3. A TCP Connection

 

Connection establishment using three-way handshake

 

 

data 전송 전 연결 setup 과정.

해당 과정이 끝나야 버퍼가 생성되고 data 전송이 가능하다.

서버는 클라이언트보다 먼저 실행해서 클라이언트의 연결 요청을 대기하고 있어야 한다.

 

순서

1. 클라이언트는 Control field의 SYN1을 셋팅해 연결요청 패킷임을 명시한 뒤 해당 패킷을 서버에게 보내 연결을 요청한다. (seq: 8000- 랜덤 번호. SYN 패킷이 잘 도착했는지 확인하는 역할)

2. 서버는 ACK을 클라이언트에게 전송해 연결요청을 허가(SYN에 대한 응답)한다. 동시에 SYN을 클라이언트에게 보내 서버도 연결요청을 한다.(seq: 15000- 랜덤 번호 / ack: 8001- 8000번까지 패킷을 받았고 8001번을 보내달라는 응답)

3. 클라이언트는 서버가 보낸 SYN에 ACK을 보내 응답한다. (ack: 15001- 15000번까지 패킷을 받았고 15001번을 보내달라는 응답)

4. 연결 완료

 

* seq != SYN

seq는 패킷 번호, SYN은 연결 요청 패킷

 

 

Data Transfer

연결이 끝나고 데이터를 주고 받는 과정.

 

 

Connection termination using three-way handshake

data 전송이 끝난 뒤 연결 종료 과정.

 

순서

1. 클라이언트는 Control field의 FIN1을 셋팅해 종료요청 패킷임을 명시한 뒤 해당 패킷을 서버에게 보내 연결 종료를 요청한다.

2. 서버는 ACK을 클라이언트에게 전송해 종료요청을 허가(SYN에 대한 응답)한다. 동시에 SYN을 클라이언트에게 보내 서버도 종료요청을 한다. 클라이언트 sending 버퍼 삭제.

3. 클라이언트는 서버가 보낸 SYN에 ACK을 보내 응답한다. 

4. 연결 종료 및 버퍼 삭제

 

 

 

연결 및 종료 과정

client 함수

socket: 소켓 생성

connect: 연결요청

write: 데이터 보내기

read: 데이터 읽기

close: 연결 종료 요청

 

server 함수

socket: 소켓 생성

bind: 생성한 소켓에 IP/Port Number 지정

listen: 서버 소켓 생성

accept: 연결 요청이 오기를 대기

read: 데이터 읽기 

write: 데이터 보내기

close: 연결 종료 요청

 

 

Half-Close 반만 종료

 

1. 클라이언트가 서버에게 FIN 요청을 보낸다.

2. 서버가 ACK을 보내 연결 종료 요청에 응답했다. 이때 클라이언트의 sending buffer가 소멸되지만 recieving buffer는 남아있으므로 서버가 보낸 데이터를 읽을 수는 있다. 

3. 클라이언트의 close 요청 수락 후에도 서버가 보낼 데이터 있으면 계속 보낸다. 서버는 클라이언트에게 보낼 데이터를 다 보내고 FIN을 보내 연결 종료를 요청한다. 

4. 클라이언트는 ACK을 보내 연결 종료 요청에 응답한다.(sending buffer가 삭제된 상태이므로 다른 말은 못하고 응답만 할 수 있음)

5. 연결 종료

 

 

 

 


자료 출처:

  • TCP/IP Protocol Suite 4th Edition Slide
    (Behrouz A. Forouzan 저, McGraw-Hill, 2010)
반응형