TCP와 UDP

ss0510sΒ·2023λ…„ 8μ›” 24일
0

CS

λͺ©λ‘ 보기
1/3
post-thumbnail

TCP와 UDP

πŸ’‘ 전솑 계측은 μ†‘μ‹ μžμ™€ μˆ˜μ‹ μžλ₯Ό μ—°κ²°ν•˜λŠ” ν†΅μ‹ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” κ³„μΈ΅μœΌλ‘œ, λͺ©μ μ§€μ— μ‹ λ’°ν•  수 μžˆλŠ” 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€. μ΄λ•Œ, μ‚¬μš©λ˜λŠ” λŒ€ν‘œμ μΈ ν”„λ‘œν† μ½œμ΄ TCP 와 UDP μž…λ‹ˆλ‹€. TCP와 UDPκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜κ³ , μ‚¬μš©λ˜λŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•©λ‹ˆλ‹€.

[1] TCP

데이터λ₯Ό λ©”μ„Έμ§€μ˜ ν˜•νƒœλ‘œ 보내기 μœ„ν•΄ IP와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œλ‘œ, 데이터λ₯Ό μ „μ†‘ν•˜κΈ° 전에 κ°€μƒνšŒμ„ μ΄λΌλŠ” 논리적 연결을 μ„€μ •ν•˜μ—¬ μ „μ†‘ν•œ μˆœμ„œλŒ€λ‘œ μˆ˜μ‹ ν•  수 μžˆλŠ” μ—°κ²° μ§€ν–₯ ν”„λ‘œν† μ½œ μž…λ‹ˆλ‹€.

  • 쒅단 κ°„ 데이터 μ†‘μˆ˜μ‹  μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • 데이터 λ‹¨μœ„: Segment
  • μ—λŸ¬λ₯Ό μ²΄ν¬ν•˜μ—¬ μ†μ‹€μ‹œ μž¬μ „μ†‘ λ“± 을 톡해 높은 신뒰성을 보μž₯ν•©λ‹ˆλ‹€.
  • 데이터λ₯Ό λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ μ „μ†‘ν•˜λŠ” 슀트림 ν†΅μ‹ μž…λ‹ˆλ‹€.
  • νλ¦„μ œμ–΄ - μ²˜λ¦¬ν•  수 μžˆλŠ” λ²”μœ„ λ‚΄μ˜ 데이터λ₯Ό 보내도둝 μ œμ–΄ν•©λ‹ˆλ‹€.μ†‘μˆ˜μ‹ μΈ‘ νŒ¨ν‚·μ„ μ‘°μ ˆν•©λ‹ˆλ‹€.
    ex) μŠ¬λΌμ΄λ”© μœˆλ„μš°, Nagle μ•Œκ³ λ¦¬μ¦˜, Clark (지연확인응닡), Slow Start
  • ν˜Όμž‘μ œμ–΄ - ν˜Όμž‘ν˜„μƒμ„ λ°©μ§€ν•˜κ±°λ‚˜ μ œμ–΄ν•©λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬λ‚΄ νŒ¨ν‚·μ„ μ‘°μ ˆν•©λ‹ˆλ‹€. ex) 혼작 νšŒν”Ό, μ‹ μ†ν•œ μž¬μ „μ†‘κ³Ό μ‹ μ†ν•œ 볡ꡬ

** μŠ¬λΌμ΄λ”© μœˆλ„μš°: μˆ˜μ‹ μΈ‘μ—μ„œ μ„€μ •ν•œ μœˆλ„μš° 크기만큼 μ†‘μ‹ μΈ‘μ—μ„œ μˆ˜μ‹ μΈ‘μ˜ 확인 응닡 없이 TCP νŒ¨ν‚·μ„ 전솑할 수 있게 ν•˜μ—¬ 흐름을 λ™μ μœΌλ‘œ μ‘°μ ˆν•˜λŠ” μ œμ–΄ κΈ°λ²•μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μˆ˜μ‹  츑의 처리 속도가 느린 경우 1byteμ”© μ „μ†‘λ˜λŠ” λ¬Έμ œκ°€ μžˆμ–΄ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

** Nagle μ•Œκ³ λ¦¬μ¦˜: μ†‘μ‹ μΈ‘μ—μ„œ 전솑할 데이터λ₯Ό ν•œλ²ˆμ— λͺ¨μ•„ μˆ˜μ‹ μΈ‘μ˜ 응닡을 λ°›μœΌλ©΄ 이λ₯Ό μ „μ†‘ν•΄μ„œ 1byteμ”© μ „μ†‘λ˜λŠ” 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

** Clark : μˆ˜μ‹ λ²„νΌκ°€ MSS만큼 λ‚¨μ•˜μ„ λ•Œ, λ˜λŠ” λ²„νΌμ˜ μ—¬μœ  곡간이 버퍼 크기의 절반이 될 λ•ŒκΉŒμ§€ μˆ˜μ‹  μœˆλ„μš° 크기λ₯Ό 계속 0으둜 ν•˜μ—¬ ACKλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€. μˆ˜μ‹ λ²„νΌμ— μΆ©λΆ„ν•œ 곡간이 생기기 μ „κΉŒμ§€ 확인 응닡을 보내지 μ•Šμ•„ 버퍼곡간 확보가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

** Slow Start: μ†‘μ‹ μΈ‘μ—μ„œ λ„€νŠΈμ›Œν¬ μƒνƒœμ— 따라 흐름을 μ œμ–΄ν•©λ‹ˆλ‹€.

[2] UDP

데이터λ₯Ό λ°μ΄ν„°κ·Έλž¨ λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œν† μ½œλ‘œ, 일련의 데이터 κ·Έλž¨λ“€μ΄ λ…λ¦½μ μœΌλ‘œ μ΄λ™ν•˜μ—¬ 졜적의 경둜둜 μ „λ‹¬ν•˜λŠ” λΉ„μ—°κ²°ν˜• ν”„λ‘œν† μ½œ μž…λ‹ˆλ‹€.

  • 데이터 λ‹¨μœ„: λ°μ΄ν„°κ·Έλž¨
  • νλ¦„μ œμ–΄, ν˜Όμž‘μ œμ–΄, μ—λŸ¬μ²΄ν¬κ°€ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 전솑 속도가 빨라 속도가 μ€‘μš”ν•œ λ°©λ©΄μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. ex) 슀트리밍 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜
  • μˆ˜μ‹ μΈ‘μ—μ„œ 체크섬을 μ΄μš©ν•˜μ—¬ μ—λŸ¬λ₯Ό 검사할 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ†‘μ‹ μΈ‘μ—μ„œλŠ” 이λ₯Ό 확인할 수 μ—†κ³ , μ²΄ν¬μ„¬μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•œ 경우 확인이 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€.

[3] TCP 헀더

TCP 헀더 μš©μ–΄

  • μˆœμ„œλ²ˆν˜Έ: 데이터 슀트림의 내뢀적인 μˆœμ„œλ₯Ό ꡬ뢄
  • ν™•μΈμ‘λ‹΅λ²ˆν˜Έ: ACKμΌλ•Œ, μˆ˜μ‹  츑이 λͺ‡ 번째 데이터λ₯Ό μˆ˜μ‹  ν–ˆλŠ”μ§€ 솑신 츑에 μ•Œλ €μ£ΌλŠ” μ—­ν•  β†’ λ‹€μŒ 번호의 데이터 μš”μ²­
  • ν”Œλž˜κ·ΈλΉ„νŠΈ
    • CWR와 ECEλŠ” λ„€νŠΈμ›Œν¬μ˜ λͺ…μ‹œμ  혼작 톡보(ECN)을 μœ„ν•œ ν”Œλž˜κ·Έμž…λ‹ˆλ‹€. 솑신 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λͺ…μ‹œμ μœΌλ‘œ 혼작 λ°œμƒμ„ μ•Œλ €μ€˜μ„œ 슀슀둜 νŠΈλž˜ν”½μ„ μ™„ν™”ν•˜λ„λ‘ ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€.
    • ECE: SYNν”Œλž˜κ·Έκ°€ μ„€μ •λœ 경우, ECN이 κ°€λŠ₯함을 μ•Œλ¦Ό, SYN ν”Œλž˜κ·Έκ°€ 0이라면 IP 헀더 셋에 혼작 κ²½ν—˜ ν”Œλž˜κ·Έκ°€ μ„€μ •λœ νŒ¨ν‚·μ΄ 정상적인 전솑 쀑에 μˆ˜μ‹ λ˜μ—ˆμŒμ„ 의미
    • CWR: ECEν”Œλž˜κ·Έλ₯Ό μˆ˜μ‹ ν•΄μ„œ μ „μ†‘ν•˜λŠ” μ„Έκ·Έλ¨ΌνŠΈ μœˆλ„μš° 크기λ₯Ό μ€„μ˜€λ‹€λŠ” 의미
    • URG: κΈ΄κΈ‰ 포인터
    • ACK: ν™•μΈμ‘λ‹΅λ²ˆν˜Έκ°€ 유효
    • PSH: 데이터λ₯Ό κ°€λŠ₯ν•œ 빨리 μ‘μš©κ³„μΈ΅μœΌλ‘œ 전달해야함
    • RST: μ—°κ²° μž¬μ„€μ •
    • SYN: 연결을 μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ μˆœμ„œλ²ˆν˜Έ 동기화 - 졜초의 μ—°κ²°μ„€μ •
    • FIN: 전솑 μ’…λ£Œ
  • μœˆλ„μš° 크기: μžμ‹ μ˜ 버퍼 μƒνƒœλ₯Ό 미리 솑신츑에 μ•Œλ €μ€ŒμœΌλ‘œμ¨ μ†‘μ‹ μΈ‘μ—μ„œ 버퍼크기 만큼 νŒ¨ν‚·μ˜ μ΄λŸ‰μ„ μ§€μ •ν•˜λ„λ‘ ν•œλ‹€. - 흐름 μ œμ–΄λ₯Ό μœ„ν•΄ μ‚¬μš©
  • 체크섬: μˆ˜μ‹ μΈ‘μ—μ„œ μ—λŸ¬ κ²€μΆœ, IP κ³„μΈ΅μ—μ„œ 검사 ν›„ IP μ€‘μš”λΆ€λΆ„μ„ λ‹€μ‹œ 검사
  • TCP 헀더 μ˜΅μ…˜
    • μ˜΅μ…˜μ˜ 끝 : λ§ˆμ§€λ§‰ μ˜΅μ…˜μž„μ„ λ‚˜νƒ€λƒ„
    • λ¬΄μž‘λ™(NOF) : TCP 헀더λ₯Ό 4byte의 배수둜 λ§Œλ“€κΈ° μœ„ν•¨
    • μ΅œλŒ€ μ„Έκ·Έλ¨ΌνŠΈ 크기(MSS): μ—°κ²° μ„€μ •μ‹œ μ–‘λ‹¨κ°„μ˜ ν•©μ˜μ— μ˜ν•΄ κ²°μ •
  • μœˆλ„μš° μŠ€μΌ€μΌ νŒ©ν„°: μœˆλ„μš° 크기λ₯Ό 2λ°°μ”© 증가 μ‹œν‚΄μœΌλ‘œμ¨ 고속 λ„€νŠΈμ›Œν¬μ—μ„œ 처리 λŸ‰μ„ μ΅œλŒ€ν™”ν•˜κΈ° μœ„ν•¨
  • νƒ€μž„ μŠ€νƒ¬ν”„
    • 솑신츑 : 전솑 μ‹œμ˜ μ‹œκ°„
    • μˆ˜μ‹ μΈ‘: 확인 응닡 전솑식 에코 μ‘λ‹΅ν•„λ“œμ— μ›λž˜μ˜ νƒ€μž„ μŠ€νƒ¬ν”„ 값을 λ„£μ–΄ 전솑
    • RTT: 솑신츑은 ν˜„μž¬μ˜ μ‹œκ°„κ³Ό νƒ€μž„ μŠ€νƒ¬ν”„ 에코 응닡에 기둝된 μ‹œκ°„μ˜ 차둜 RTTλ₯Ό ꡬ함

[4] UDP 헀더

[5] TCP μ—°κ²°

Three-way handshake - μ—°κ²° μ„€μ •

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” TCP μ„Έκ·Έλ¨ΌνŠΈμ— SYN λΉ„νŠΈλ₯Ό μ„€μ •, ISN(Initial Sequence Number)λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
  2. μ„œλ²„μΈ‘μ—μ„œλŠ” SYNκ³Ό ν΄λΌμ΄μ–ΈνŠΈμ˜ μˆœμ„œλ²ˆν˜Έμ— 1λ₯Ό λ”ν•œ ISN값을 κ°–λŠ” ACKλ₯Ό λ³΄λƒ…λ‹ˆλ‹€.
  3. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ ACKλ₯Ό λ³΄λƒ„μœΌλ‘œμ¨ μ–‘λ°©ν–₯ 연결을 μ„€μ •ν•©λ‹ˆλ‹€.

four-way handshake - μ—°κ²° μ’…λ£Œ

  1. 연결을 μ’…λ£Œν•˜λ €λŠ” 솑신 츑은 FIN λΉ„νŠΈλ₯Ό μ„€μ •ν•˜μ—¬ μ „μ†‘ν•©λ‹ˆλ‹€.
  2. μˆ˜μ‹ μΈ‘μ—μ„œ 확인 응닡 λ©”μ‹œμ§€λ₯Ό 보내어 μ†‘μ‹ μΈ‘μ—μ„œ μˆ˜μ‹ μΈ‘μœΌλ‘œμ˜ 연결을 μ’…λ£Œν•©λ‹ˆλ‹€.
  3. μˆ˜μ‹ μΈ‘μ€ FIN λΉ„νŠΈλ₯Ό μ„€μ •ν•˜μ—¬ μ†‘μ‹ μΈ‘μœΌλ‘œ μ„Έκ·Έλ¨ΌνŠΈλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
  4. 솑신츑이 이 μ„Έκ·Έλ¨ΌνŠΈμ— 확인 μ‘λ‹΅ν•¨μœΌλ‘œμ¨ μˆ˜μ‹ μΈ‘μ—μ„œ μ†‘μ‹ μΈ‘μœΌλ‘œμ˜ 연결을 μ’…λ£Œν•©λ‹ˆλ‹€.
  • four-way handshake 이유: λ°μ΄ν„°μ˜ μœ μ‹€μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ μž…λ‹ˆλ‹€.
    ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μ—°κ²° ν•΄μ œ μš”μ²­μ„ μ „μ†‘ν•˜κ³ , μ„œλ²„μ—μ„œ ν•œλ²ˆμ— ν•΄μ œν•˜λ©΄ 아직 κ°€μƒνšŒμ„  내에 λ„λ‹¬ν•˜μ§€ λͺ»ν•œ νŒ¨ν‚·μ΄ μ‘΄μž¬ν•  경우 μœ μ‹€λ  κ°€λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.
    ν΄λΌμ΄μ–ΈνŠΈκ°€ μ „μ†‘ν•œ νŒ¨ν‚·μ΄ μž¬μ „μ†‘ λ“±μœΌλ‘œ μ„œλ²„ 츑에 늦게 λ„μ°©ν•˜λŠ” μƒν™©μ—μ„œ μœ μ‹€λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 4way handshaek와 ν•¨κ»˜ Time-wait을 μ œκ³΅ν•©λ‹ˆλ‹€.

TCP λ™μž‘

[6] UDP λ™μž‘

profile
κ°œλ°œμžκ°€ 되기 μœ„ν•΄ μ„±μž₯ν•˜λŠ” μ€‘μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€