[컴퓨터망] - TCP connection

2023. 4. 14. 17:29· Computer Science/Network
목차
  1. 2-way handshake
  2. 동작 방식
  3. 3-Way Handshake
  4. 연결 시작
  5. 연결을 종료
  6. 😀요약

TCP는 신뢰성 있는 연결을 하는 프로토콜입니다.

UDP랑 다르게 연결을 시작할 때도 복잡한 과정을 거칩니다.

 

연결을 시작하기전에, 송신/수신의 상태를 확인하는 과정이 필요합니다.

 

2-way handshake

TCP 연결을 수립하는 방법 중 하나입니다.

클라이언트에서 연결을 하고싶다고 제안하면, 서버 측에서 승낙하는 방식입니다.

동작 방식

  1. 클라이언트가 서버에게 연결을 요청합니다.
    • 이때 Headr의 SYN bit를 1로 설정하여 보냅니다.
  2. 서버가 연결이 가능할 경우, 클라언트에게 응답을 보냅니다.
    • TCP header의 ACK,SYN bit를 1로 설정하여 보냅니다.
  3. 클라이언트가 서버로 부터 받은 ACK 패킷과, SYN 패킷을 확인하고, 데이터를 전송합니다.

 

설명의 편의를 위해서 왼쪽을 A, 오른쪽을 B라고 하겠습니다.

위 그림은 A가 B에게 요청을 했지만, 요청 응답이 많이 딜레이가 되어 재 연결 요청하는 상황입니다.

이 경우 B는 과거의 연결 요청에 대한 순서 번호로 응답을 했지만, 재전송 이후에 그 응답이 왔고, A는 재전송에 대한 응답패킷이 아니기에, B의 응답 패킷을 버리게 됩니다.

B입장에서는 A가 내 응답을 제대로 받았는지 확인할 수 없기에, B혼자 연결된 상황입니다.

 

TCP 프로토콜의 특징중 하나인 양방향 연결성인데, 이런 경우는 통신의 신뢰성을 보장할 수 없습니다.

이러한 문제점을 해결하기 위해 3-way handshake가 등장했습니다.

 


3-Way Handshake

 

연결 시작

 

  1. 클라이언트가 TCP 프로토콜에서 연결하자는 의미로 SYN패킷(SYN bit 와 seq num(순서 번호))를 서버에게 보낸다.
  2. 서버는 클라이언트의 seq num(순서 번호)가 X인 것을 알게 되고, 클라이언트에게 Syn, ACK가 합쳐진 패킷을 보내면서, 자신의 seq num이 Y임을 가르쳐줌.
    • 여기서 보내는 ACK는 클라이언트의 seq num +1로 설정한다.
  3. 클라이언트는 서버로부터 잘 받았다는 의미로 ACK를 보낸다.
    • 여기서 보내는 ACK는 서버의 seq num + 1로 설정한다.

 

연결을 종료

연결을 종료 할 때도 핸드셰이크 과정이 필요하다.

한쪽이 일방적으로 연결을 끊어 버리면, 통신의 신뢰성이 떨어지기 때문입니다.

  1. 클라이언트가 연결 종료를 하자는 FIN 패킷을 서버에게 보냅니다.
  2. 서버는 응답으로 ACK 패킷을 클라이언트에게 보냅니다.
    • 여기서 ACK를 보내는 의미는 나 이제 데이터 안 받을 거야~~ 
    • 그리고 서버에서 보낼 데이터가 있다면, 데이터를 모두 전송합니다.
  3. 서버가 모든 데이터 전송을 마친 후, FIN을 클라이언트에게 보냅니다.
    • 나도 이제 데이터 안 보낼거야~~ 라는 의미입니다.
  4. 클라이언트는 FIN 패킷을 받고, 연결을 종료하기 위해 ACK 패킷을 서버에게 보냅니다.
  5. 서버는 ACK 패킷을 받고, 연결을 종료합니다.

이 과정에서 양측은 서로에게 Fin 패킷과 ACK 패킷을 전송하여 연결을 종료하기에, 4-way  hadnshake라고도 합니다.

 


😀요약

  • TCP는 신뢰성 있는 통신을 지향하기에, 데이터를 교환하기 전 송신/수신 상태를 확인하는 과정이 있다.
  • 2- way handshake 방식은 특정한 경우, 양방향 연결이 되지 않기에, 신뢰성을 보장할 수 없다.
  • 3-way handshake 방식은 연결을 시작할 때 사용한다.
  • 4-way handshake 방식은 연결을 종료할 때 사용한다.
저작자표시 (새창열림)

'Computer Science > Network' 카테고리의 다른 글

[컴퓨터망] - TCP congestion control  (1) 2023.04.15
[컴퓨터망] - principles of congestion control  (0) 2023.04.14
[컴퓨터망]- TCP flow control  (0) 2023.04.14
[컴퓨터망] - TCP 네놈이 뭔데?  (0) 2023.04.14
[컴퓨터망] - Rdt,pipeline, Go-Back-N, Selective Repeat  (2) 2023.04.13
  1. 2-way handshake
  2. 동작 방식
  3. 3-Way Handshake
  4. 연결 시작
  5. 연결을 종료
  6. 😀요약
'Computer Science/Network' 카테고리의 다른 글
  • [컴퓨터망] - TCP congestion control
  • [컴퓨터망] - principles of congestion control
  • [컴퓨터망]- TCP flow control
  • [컴퓨터망] - TCP 네놈이 뭔데?
재한
재한
안녕하세요 💻
재한
짜이한
전체
오늘
어제
  • 분류 전체보기 (504)
    • Skils (118)
      • Android (52)
      • C++ (5)
      • Kotlin (36)
      • Algorithm (24)
      • Server (1)
    • CodingTest (228)
      • Programmers (45)
      • Baekjoon (183)
    • Experience (8)
      • 후기(코딩테스트,프로그램,프로젝트) (8)
    • Computer Science (70)
      • Design Pattern (2)
      • OOP (2)
      • Computer Architecture (14)
      • OS (2)
      • Software Engineering (3)
      • DataBase (8)
      • Network (39)
    • 학교 (75)
      • R프로그래밍 (26)
      • 회계와 사회생활 (17)
      • 컴퓨터학개론 (20)
      • it기술경영개론 (12)

블로그 메뉴

  • 홈
  • 태그
  • 카테고리
  • 글쓰기
  • 설정

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
재한
[컴퓨터망] - TCP connection
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.